将局部变量传递给部分中的hidden_​​field

时间:2010-02-10 06:35:21

标签: ruby-on-rails parameters partial-views

我正在尝试将这些本地参数传递给部分表单,并将它们传递给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%>

3 个答案:

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

这将呈现一个可以访问以下局部变量的部分:fpositionbattalion_idcompany_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) %>