2010-02-10 105 views
0

我试图将这些局部变量传递给局部窗体,并将它们传递给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%> 

回答

4

你在这里混合两个想法。

首先,

实例变量(谁的名字开始与“@”)适用于所有的意见和谐音。它有效,但它被认为是不好的做法。特别是在处理可以从多个动作中调用的部分时。

无论如何,你的代码没有理由不工作。即使你在当地人的论点中没有company_id和battalion_id。

其次,

看来你误会了怎么:参数当地人的作品。当使用给定的散列来调用渲染时,Rails将为给定散列中的每个键/值对定义一个局部变量。每个局部变量的名称都是散列键值和散列值的值。

要使用你的代码为例:

<%= render :partial => "form", :locals => { :f => f, :position => 'Company Commander', :battalion_id => @battalion.id, :company_id => c.id} %> 

,这会使得部分可以访问以下局部变量:fpositionbattalion_idcompany_id设定为F的电流值,“公司Commander',@ battalion.id,@ company.id分别。

P.S.您有两个隐藏的字段battalion_id。只有第一个会被使用。它看起来像第二个应该是company_id。

+0

谢谢,这清理了我。欣赏它。 – looloobs 2010-02-10 20:46:51

2

当您使用:locals参数的部分,您可以参考变量时省略了@

<%= f.hidden_field :battalion_id, :value => battalion_id %> 
+0

当我这样做时,我得到“未定义的局部变量或方法'营”我只是不明白我在传递这些当地人时做错了什么。任何其他想法,非常感谢。 – looloobs 2010-02-10 16:13:59

1

在你的部分,尝试...

<%= f.hidden_field (:position, :value => position) %> 
<%= f.hidden_field (:battalion_id, :value => battalion_id) %> 
<%= f.hidden_field (:battalion_id, :value => company_id) %>