我正在尝试将这些本地参数传递给部分表单,并将它们传递给hidden_fields。我不能将这些值直接放入表单中,因为它们会改变。任何帮助将不胜感激。
我有:
<% form_for :user, @user, :url => { :action => "create", :controller => "users"} do |f| %>
<%= f.error_messages %>
<%= render :partial => "form", :locals => { :f => f, :position => 'Company Commander', :battalion_id => @battalion.id, :company_id => c.id} %>
<%= f.submit "Register" %>
<% end %>
_form.html
<%= f.hidden_field (:position, :value => :position) %>
<%= f.hidden_field (:battalion_id, :value => @battalion.id) %>
<%= f.hidden_field (:battalion_id, :value => @company.id) %>
<%= f.hidden_field (:roles, :value => "Company") %>
<%= f.label (:name, "Name:") %>
<%= f.text_field :name%>
<br />
<%= f.label (:login, "Login:") %>
<%= f.text_field :login %>
<br />
<%= f.label (:email, "E-Mail:") %>
<%= f.text_field :email%>
答案 0 :(得分:5)
你在这里混合了两个想法。
首先,
实例变量(名称以'@'开头的变量)可供所有视图和部分使用。它有效,但它被认为是不好的做法。特别是在处理可以从多个动作中调用的部分时。
在任何情况下,您的代码都没有理由不起作用。即使你在locals参数中没有company_id和battalion_id。
第二,
您似乎误解了:locals参数的工作原理。当使用给定为locals的哈希调用render时,Rails将为给定哈希中的每个键/值对定义局部变量。每个局部变量都将具有哈希键的名称和哈希值的值。
以您的代码为例:
<%= render :partial => "form", :locals => { :f => f, :position => 'Company Commander', :battalion_id => @battalion.id, :company_id => c.id} %>
这将呈现一个可以访问以下局部变量的部分:f
,position
,battalion_id
和company_id
设置为f的当前值,'公司指挥官',@ battalion.id,@ company.id。
P.S。您有两个用于battalion_id的隐藏字段。只会使用第一个。看起来第二个应该是company_id。
答案 1 :(得分:2)
对部分使用:locals
参数时,可以在引用变量时省略@
:
<%= f.hidden_field :battalion_id, :value => battalion_id %>
答案 2 :(得分:1)
在你的部分中,试试......
<%= f.hidden_field (:position, :value => position) %>
<%= f.hidden_field (:battalion_id, :value => battalion_id) %>
<%= f.hidden_field (:battalion_id, :value => company_id) %>