【问题标题】:passing parameters between views and controllers ruby 1.8.7在视图和控制器之间传递参数 ruby​​ 1.8.7
【发布时间】:2015-04-27 18:05:59
【问题描述】:

我将此表单嵌套在视图“A”中

<div>
<%if current_user%> 
    <%=form_for(ModelB.new) do |f|%>
      <%if (params[:param_to_check].present?)%>
        <%f.hidden_field "param1",:value=> @modelA.id%>
        <%f.hidden_field "param2",:value=> current_user.id%>
      <%end%>
    render button
    <%end%>
<%else%>
    render other butotn
<%end%>

</div>

以及 Bs_controller 中的这个“发现”:

@modelA=ModelA.find_by_id(params[:param1])
  :option_from_specific_gem=> -(@modelA.wanted_value).abs

当我查看传递给 Bs_controller 的参数时,我看到了:

Parameters: {"authenticity_token"=>"some_hash=", "utf8"=>"✓", "y"=>"42", "x"=>"144"}

我需要将 hidden_​​field 的值传递给 Bs_controller。

感谢关注:)

这里是要点:https://gist.github.com/rmatuoka/dd6904809cf89cf916f7

【问题讨论】:

  • 是否设置了 current_user? params[:param_to_check] 有值吗?呈现的 HTML 中是否存在隐藏字段?
  • &lt;% f.hidden_field "param1",:value=&gt; @modelA.id %&gt; 应该是&lt;%= f.hidden_field "param1",:value=&gt; @modelA.id %&gt;,你有它,它不会渲染

标签: ruby-on-rails-3 controller params


【解决方案1】:

我做了一些cmets,我会继续把它们变成答案。

有 3 种可能的情况。假设这不是拼写错误,您当前没有将隐藏字段输出到 HTML。您需要我们&lt;%= %&gt; 来输出结果。

<%= f.hidden_field "param1",:value=> @modelA.id %>
<%= f.hidden_field "param2",:value=> current_user.id %>

这很可能是问题所在。否则我猜 current_user 或 params[:param_to_check] 是 nil。

【讨论】:

  • 谢谢,我注意到就在阅读您的答案之前,大声笑。当我回来删除时,我看到了您的答案,并决定将其留给像我这样不经意的人:)
【解决方案2】:

param1param2 添加到您的允许参数列表中。在你的控制器中,你应该有类似的东西:

def modela_params
  params.require(:modela).permit(:x, :y, :param1, :param2)
end

【讨论】:

  • 他被标记为 Rails 3,并没有提到强参数,所以很可能不是这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
相关资源
最近更新 更多