我有一个包含以下代码的编辑页面,基本上是一个调用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。
提前致谢。
答案 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]
。