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

3 回答 3

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

这将呈现一个可以访问以下局部变量的局部变量:fpositionbattalion_idcompany_id分别设置为 f、'Company Commander'、@battalion.id、@company.id 的当前值。

PS你有两个隐藏的battalion_id 字段。只有第一个会被使用。看起来第二个应该是 company_id。

于 2010-02-10T18:04:32.520 回答
2

当您将参数用于部分时,您可以在引用变量时:locals省略:@

<%= f.hidden_field :battalion_id, :value => battalion_id %>
于 2010-02-10T09:30:04.600 回答
1

在你的部分,尝试......</p>

<%= f.hidden_field (:position, :value => position) %>
<%= f.hidden_field (:battalion_id, :value => battalion_id) %>
<%= f.hidden_field (:battalion_id, :value => company_id) %>
于 2010-02-10T17:57:17.960 回答