【问题标题】:RoR Difficulty accessing params in controllerRoR 难以访问控制器中的参数
【发布时间】:2011-08-03 02:59:18
【问题描述】:

我有一个包含以下代码的编辑页面,基本上是一个下拉菜单和一个调用更新的按钮。

  <% 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 %>

服务器读取就像正在设置参数:

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] 总是为零。当我输入 if params[:id] == nil 时,它会转到 entry_url。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails-3 params


    【解决方案1】:

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

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

    &lt;%= select("car_info", "id", @available_cars.collect {|v| [v.name, v.id]})%&gt;

    然后在你的控制器中:

    if params[:car_info][:id]

    【讨论】:

    • 感谢这个答案有效,但上面的内容更简洁,所以我会使用它。我希望我可以投票,但我还没有足够的代表。再次感谢。
    【解决方案2】:

    虽然其他答案可行,但这可能是您想要做的(使用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]了。

    【讨论】:

    • 谢谢,这比下面的答案更干净,所以我会使用它。两者都起作用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多