RoR难以访问控制器中的参数

时间:2011-08-02 18:17:20

标签: ruby-on-rails-3 params

我有一个包含以下代码的编辑页面,基本上是一个调用update的下拉列表和按钮。

  <% form_tag('switch_car', :method => :put) do%>
<div class="field">
    <label>Car Name:</label>
    <%= select("params", ":id", @available_cars.collect {|v| [v.name, v.id]})%>
</div>
<div>
    <%= submit_tag "Switch Car" %>
</div>
<% end %>

服务器读起来就像正在设置params:

Parameters: {"utf8"=>"Γ£ô", "authenticity_token"=>"8vHXrnICaOKrGns6FfMUcd/dWo5kpNKpA8F5l5ozRkY=", "params"=>{":id"=>"9"}, "commit"=>"Switch Car"}

然而,当我把参数放入一个会话中时我什么都没得到。它似乎永远是零。不确定我做错了什么?这是控制器中的代码。

     def update
    if params[:id]
      session[:car_info_id] = params[:id]
      redirect_to entry_url
    else
      redirect_to switch_car_path
    end

  end

它总是被重定向到switch_car_path所以我假设params [:id]总是为零。当我把params [:id] == nil时,它转到entry_url。

提前致谢。

2 个答案:

答案 0 :(得分:3)

你想要params[:params][":id"]

或者,您可以将其放在视图中:

<%= select("car_info", "id", @available_cars.collect {|v| [v.name, v.id]})%>

然后在你的控制器中:

if params[:car_info][:id]

答案 1 :(得分:1)

虽然其他答案可行,但这可能是您想要做的事情(使用select_tag(:id)会自动将:id键/值添加到params哈希值:

<% form_tag('switch_car', :method => :put) do %>
  <div class="field">
    <label>Car Name:</label>
    <%= select_tag(:id, options_from_collection_for_select(@available_cars, "id", "name")) %>
  </div>
  <div>
    <%= submit_tag "Switch Car" %>
  </div>
<% end %>

然后您可以轻松访问控制器中的params[:id]