我喜欢Rail的map.resources生成的所有默认路由.但是,有些情况下我想在我的路线中使用非数字标识符.例如,如果嵌套路由由用户及其文章组成,则可以按如下方式编写标准路由:
map.resources :users, :has_many => [:articles] # => e.g. '/users/:id/articles/:id'
Run Code Online (Sandbox Code Playgroud)
但是,有许多优点/原因不使用Rails生成的默认数字标识符.有没有办法将default:id params替换为我选择的另一个规范标识符,而不会为每个标准操作编写自定义路由?如果我想要一个以下格式的路线:
'/users/:login/articles/:id'
Run Code Online (Sandbox Code Playgroud)
这种路线是否可以使用map.resources实现?
我params在我的控制器中使用如下:
class ProductsController < ApplicationController
def create
@product = Product.new(params[:aircon])
...
end
end
Run Code Online (Sandbox Code Playgroud)
是params的属性ApplicationController?我猜不是,因为它没有@前缀.那么,究竟params是什么?我可以在任何自定义方法中使用它ProductsController吗?
在Python中,我可以这样做:
>>> import urlparse, urllib
>>> q = urlparse.parse_qsl("a=b&a=c&d=e")
>>> urllib.urlencode(q)
'a=b&a=c&d=e'
Run Code Online (Sandbox Code Playgroud)
在Ruby [+ Rails]中,我无法弄清楚如何在没有"滚动我自己"的情况下做同样的事情,这看起来很奇怪.Rails方式对我不起作用 - 它为查询参数的名称添加方括号,另一端的服务器可能支持也可能不支持:
>> q = CGI.parse("a=b&a=c&d=e")
=> {"a"=>["b", "c"], "d"=>["e"]}
>> q.to_params
=> "a[]=b&a[]=c&d[]=e"
Run Code Online (Sandbox Code Playgroud)
我的用例很简单,我希望使用query-stringURL部分中某些值的值.依靠标准库和/或Rails似乎很自然,写下这样的东西:
uri = URI.parse("http://example.com/foo?a=b&a=c&d=e")
q = CGI.parse(uri.query)
q.delete("d")
q["a"] << "d"
uri.query = q.to_params # should be to_param or to_query instead?
puts Net::HTTP.get_response(uri)
Run Code Online (Sandbox Code Playgroud)
但只有在结果URI实际上是http://example.com/foo?a=b&a=c&a=d,而不是http://example.com/foo?a[]=b&a[]=c&a[]=d.有没有正确或更好的方法来做到这一点?
这是我的代码的简化:
void Foo(params object[] args)
{
Bar(string.Format("Some {0} text {1} here {2}", /* I want to send args */);
}
Run Code Online (Sandbox Code Playgroud)
string.Format要求发送的参数为params.有没有什么方法可以将args集合转换为string.Format方法的参数?
我是一个新手,我试图让一个脚本在PHP中用Curl触发另一个脚本,但它似乎正在发送参数.
是否有单独的函数来追加参数?
<?php
$time = time();
$message = "hello world";
$urlmessage = urlencode( $message );
$ch = curl_init("http://mysite.php?message=$urlmessage&time=$time");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>
Run Code Online (Sandbox Code Playgroud)
谁能指出我正确的方向?
I want to do something like this:
double a, b, c, d, e;
ParseAndWrite("{1, 2, 3}", ref a, ref b, ref c);
ParseAndWrite("{4, 5}", ref d, ref e);
-> a = 1, b = 2, c = 3, d = 4, e = 5
Run Code Online (Sandbox Code Playgroud)
However, I can not write a function like this:
private void ParseAndWrite(string leInput, params ref double[] targets)
{
(...)
}
Run Code Online (Sandbox Code Playgroud)
This doesn't work, for some reason one can not use ref and params at the same …
我尝试了很多人的代码 - 如何测试rails中是否存在参数,但它不起作用():
if ( params.has_key?([:start_date]) && params.has_key?([:end_date]) )
Run Code Online (Sandbox Code Playgroud)
我想,那是因为复杂的参数,如果我写这个:
if ( params.has_key?([:report][:start_date]) && params.has_key?([:report][:end_date]) )
Run Code Online (Sandbox Code Playgroud)
给我错误
can't convert Symbol into Integer
Run Code Online (Sandbox Code Playgroud)
这也行不通:
if ( params[:report][:start_date] && params[:report][:end_date] )
Run Code Online (Sandbox Code Playgroud)
给我错误:
undefined method `[]' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
它总是进入其他声明.
这是我的参数:
report:
start_date: 01/08/2012
end_date: 10/08/2012
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗 ?
我需要用Sinatra制作一些看起来像的方法:
访问http //:本地主机:1234 /添加string_to_add
但是当我宣布它是这样的:
get "/add?:string_to_add" do
...
end
Run Code Online (Sandbox Code Playgroud)
它没有看到string_to_add参数.
我应该如何声明我的方法并使用此参数来使事情有效?
看起来像RSpec中的一个错误,但也许我错过了一些东西.
我有一个请求规范,我发布了一个包含哈希数组的JSON:
规格/请求/ dummy_request_spec.rb:
post "http://my.server.com/some/route", {
format: :json,
data: [
{
details: {
param1: 1
},
},
{
details: {
param2: 1
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
出于某种奇怪的原因,RSpec将哈希合并为一个元素,然后将它们发送到服务器.打印出控制器中收到的参数:
data: [
{
details: {
param1: 1,
param2: 2
},
},
]
Run Code Online (Sandbox Code Playgroud)
版本:rspec-2.13.0 rails-3.2.10
很奇怪!!
谢谢
我正在开发一个基本的调查应用程序,用户可以在我的Android应用程序中进行调查,然后将选择发布回我的rails服务器.有一次,它向服务器公布了选择,但它最近在解析params并且不再创建用户选择时开始抛出错误.
我是HTTP的新手,并且一直在努力解决这个错误.任何帮助深表感谢!
如果我这样做卷曲请求:
curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X POST -d {"question_id":"1","answer_id":"2"} http://ec2-54-186-132-102.us-west-2.compute.amazonaws.com:8080/questions/1/choices
Run Code Online (Sandbox Code Playgroud)
我最终在stacktrace中出现了这个错误:
Started POST "/questions/1/choices" for 172.31.10.156 at 2014-03-19 11:15:02 +0000
Error occurred while parsing request parameters.
Contents:
ActionDispatch::ParamsParser::ParseError (795: unexpected token at 'question_id:1'):
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:53:in `rescue in parse_formatted_parameters'
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:32:in `parse_formatted_parameters'
actionpack (4.0.0) lib/action_dispatch/middleware/params_parser.rb:23:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/flash.rb:241:in `call'
rack (1.5.2) lib/rack/session/abstract/id.rb:225:in `context'
rack (1.5.2) lib/rack/session/abstract/id.rb:220:in `call'
actionpack (4.0.0) lib/action_dispatch/middleware/cookies.rb:486:in `call'
activerecord (4.0.0) lib/active_record/query_cache.rb:36:in `call'
activerecord (4.0.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:626:in `call'
activerecord (4.0.0) lib/active_record/migration.rb:369:in …Run Code Online (Sandbox Code Playgroud)