通过url传递参数

时间:2010-11-05 22:16:19

标签: ruby-on-rails

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

例如,如果我有..

http://0.0.0.0:3000/lists/create/list [名称] =保罗&安培;列表[年龄] = 39&安培;列表[标签] =杂项

所以我创建了一个名为lists的控制器,我想传递名称,年龄和标签..

在我的例子中,我正在路过..

name = Paul 年龄= 39岁 tag = misc

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

有人能告诉我如何构建上面的url以正确传递参数吗?

由于 保罗

1 个答案:

答案 0 :(得分:3)

默认情况下,Rails的RESTful路由通过create(常规网址)协议禁止GET操作。对于您的具体示例,您需要将此路由添加到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

对于更一般的情况,您可以类似地配置路由,并按以下方式配置:

您需要在:method => 'get'中指定form_tag

这在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是网址:http://my.server/search?q={query input}&commit=Search