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

loo*_*obs 0 parameters ruby-on-rails 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 %>
Run Code Online (Sandbox Code Playgroud)

_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%>
Run Code Online (Sandbox Code Playgroud)

EmF*_*mFi 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} %>
Run Code Online (Sandbox Code Playgroud)

:这将使得部分可以访问下面的局部变量fpositionbattalion_idcompany_id分别设定为F,“连长”,@ battalion.id,@ company.id的当前值。

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