2010-11-05 203 views
1

如何使用普通网址将参数传递给Rails应用程序?通过url传递参数

举例来说,如果我有..

http://0.0.0.0:3000/lists/create/list[name]=Paul &列表[年龄] = 39 &列表[标签] =杂项

所以我创建了一个名为控制器列表和我想通过姓名,年龄和标签..

在我的例子,我路过..

名=保罗 年龄= 39 标签= misc

我粘贴上面的示例说,该项目已创建,但它添加的项目有空数据,表明我的格式不正确。

任何人都可以告诉我如何构造上面的URL来正确传递参数?

感谢 保罗

+0

你是怎么发布到0.0.0.0? – 2010-11-05 22:29:08

+0

嗯,这是我被告知连接到当我运行脚本/服务器时,默认地址,我也尝试localhost:3000但仍然得到同样的问题,这一切都在当地测试 – Azalar 2010-11-05 22:30:45

回答

3

默认情况下,导轨的REST路由禁止通过GET(常规URL)协议create行动。为了您的具体的例子,你需要这个路由添加到你的config/routes.rb文件文件:

map.create_list 'list/create', :controller => 'lists', :action => 'create', :conditions => { :method => :get } 

这增加了一个路线create_list_pathcreate_list_url是通过GET的链接进行访问,等用于创建网址列表中直接将是:

http://0.0.0.0:3000/lists/create?list[name]=Paul&list[age]=39&list[tag]=misc 

还要注意的是,如果你得到关于无效的真实性令牌错误,则可能需要将此行添加到您的控制器:

skip_before_filter :verify_authenticity_token, :only => :create 

对于更一般的情况下,可以配置同样的路线和形式如下:

你需要在你的form_tag指定:method => 'get'

这在Ruby on Rails Form Helpers指南(搜索“通用搜索表单”)中进行了讨论。

给出的基本代码应该让你开始是

<%= form_tag(search_path, :method => "get") do %> 
    <%= label_tag(:q, "Search for:") %> 
    <%= text_field_tag(:q) %> 
    <%= submit_tag("Search") %> 
<% end %> 

产生

<form action="/search" method="get"> 
    <label for="q">Search for:</label> 
    <input id="q" name="q" type="text" /> 
    <input name="commit" type="submit" value="Search" /> 
</form> 

GET S上的网址:http://my.server/search?q={query input}&commit=Search

+0

我真的没有我自己的在这个阶段形成,除了脚手架会产生什么 – Azalar 2010-11-05 23:05:20

+0

在脚手架生成的表单中,您应该可以添加':method =>'get''来将参数放入url中。 – 2010-11-06 01:15:09

+0

有没有这样做没有窗体,我最终希望能够调用网址传递几个参数,所以它不会使用窗体 – Azalar 2010-11-06 16:23:41