【问题标题】:Nested attributes in form not visible表单中的嵌套属性不可见
【发布时间】:2015-02-16 22:51:29
【问题描述】:

我可能遗漏了一些简单的东西,但我尝试了很多方法都无济于事。 我需要能够编辑现有曲目(使用 ActiveAdmin)并保存记录以更新其排他性状态。

我有一个Tracks 模型

#app/models/track.rb:

  has_many :exclusivities, class_name: 'Exclusivity', dependent: :destroy

  accepts_nested_attributes_for :exclusivities

  attr_accessible :exclusivities_attributes

  #whether or not track is exclusive [boolean]
  attr_accessible :exclusive

  #whether or not track is fully exclusive and should be pulled off the front end [boolean]
  attr_accessible :full_exclusivity

我刚刚创建了一个Exclusivity 模型。

#app/models/exclusivity.rb    

  belongs_to :track
  attr_accessible :end_date, :industry, :track_id, :notes, :staff_notes

和我的表格:

<%= semantic_form_for [:manage, @track], html: {data: {secondary:true}} do |f| %>

a bunch of inputs.....

<%= f.inputs "Track Exclusivity", class:'inputs align-left' do %>
  <%= f.input :exclusive %>
  <%= f.input :full_exclusivity,
  label: "Fully Exclusive" %>
  <%= f.fields_for :exclusivities do %>
    <%= f.input :notes %> 
    <%= f.input :staff_notes %> 
    <%= f.input :industry %> 
    <%= f.input :end_date, as: :date_picker %>
  <% end %>
<% end %>

当我去编辑一个轨道时,轨道属性在那里,但嵌套的(排他性属性)没有(我可以检查轨道的排他性和 full_exclusivity 复选框)

我也尝试过使用semantic_fields_forf.inputs :for =&gt; exclusivities

我在这里错过了什么?

【问题讨论】:

    标签: ruby-on-rails activeadmin nested-attributes formtastic


    【解决方案1】:

    您忘记将表单构建器传递给 fields_for 块。

    <%= f.inputs "Track Exclusivity", class:'inputs align-left' do %>
      <%= f.input :exclusive %>
      <%= f.input :full_exclusivity,
      label: "Fully Exclusive" %>
      <%= f.fields_for :exclusivities do |ff| %>
        <%= ff.input :notes %> 
        <%= ff.input :staff_notes %> 
        <%= ff.input :industry %> 
        <%= ff.input :end_date, as: :date_picker %>
      <% end %>
    <% end %>
    

    【讨论】:

    • 谢谢伙计。你是对的,我忽略了这一点!也就是说,当我去编辑(使用 activeAdmin)时,那些相关的字段仍然没有用。
    • 您好,很高兴您解决了问题。我将建议您确保您的对象不是零,但不想因为您提到“编辑”而变得迂腐,因为您提到了“编辑”,我假设已经创建了排他性。但是是的,与 nil 相关的对象通常是罪魁祸首,并且每次都会让你陷入困境。
    【解决方案2】:
    <%= form_for @person do |person_form| %>
      ...
      <%= person_form.fields_for :projects do |project_fields| %>
        <% if project_fields.object.active? %>
          Name: <%= project_fields.text_field :name %>
        <% end %>
      <% end %>
      ...
    <% end %>
    

    来自http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

    【讨论】:

      【解决方案3】:

      实际的问题是:如果曲目的排他性属性为空,则不会显示表单字段。因此,当您点击编辑控制器时,我会使用此代码自动构建关联的属性。成功了!

       def edit
         @track = Track.includes(:licenses).find(params[:id])
            if @track.exclusivities.empty?
              @track.exclusivities.build
            end
          @track.save
       end 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多