collection_selection在fields_for中创建局部变量

时间:2012-05-31 13:22:55

标签: ruby-on-rails ruby

我正在尝试构建一个rails表单,它将使用collection_select调用将局部变量传递回控制器,并且生成错误,而这些错误在我的生活中无法解决。

表单位于Network#new视图中。 collection_select应该创建现有超级用户的下拉菜单,因此可以在创建时为新网络分配超级用户(通过superuser_id)。 Network#create方法知道如何处理superuser_id。所以我的表格看起来像这样:

<%= form_for(@network) do |f| %>
  <%=render(partial: 'edit_form', locals: {f: f} ) %>

  <% fields_for 'superuser_id', url: {action: :create} do |su| %>
    <div>
      <%= su.label 'Network Superuser' %>
      <%= su.collection_select( 'superuser_id',@superusers, :id, :user_name)  %>
    </div>
  <% end %>

  <div>
    <%= f.submit %>
  </div>
   

我得到的错误是:

ActionView::Template::Error (undefined method `superuser_id' for {:url=>{:action=>:create}}:Hash):
6:   <% fields_for 'superuser_id', url: {action: :create}  do |su| %>
7:      <div>
8:        <%= su.label 'Network Superuser' %>
9:        <%= su.collection_select( 'superuser_id', @superusers, :id, :user_name)  %>
app/views/networks/new.html.erb:9:in `block (2 levels) in _app_views_networks_new_html_erb__687644901_79475060'

我出错的任何想法?

由于

史蒂夫

1 个答案:

答案 0 :(得分:1)

fields_for旨在处理关系的子形式,因此通常使用fields_for :supervisor而不使用_id。但是,看起来这是:belongs_to关系,fields_for完全不需要。您没有尝试创建表单来编辑超级用户的属性,您只是将现有ID分配给网络对象。

尝试:<%= f.collection_select( 'superuser_id',@superusers, :id, :user_name) %>没有fields_for块