【问题标题】:ActiveAdmin forms with has_many - belongs_to relationships?具有 has_many - belongs_to 关系的 ActiveAdmin 表单?
【发布时间】:2011-10-31 18:30:04
【问题描述】:

我有模型 Home 和 Photo,它们具有 has_many - belongs_to 关系(多态关系,但我认为在这种情况下并不重要)。我现在正在设置活动管理员,我希望管理员能够从家庭表单向家庭添加照片。

照片由 CarrierWave gem 管理,我不知道这是否会使问题变得更容易或更难。

如何在 Active Admin Home 表单中包含不同模型的表单字段?有做这种事情的经验吗?

class Home < ActiveRecord::Base
  validates :name, :presence => true,
                     :length => { :maximum => 100 }
  validates :description, :presence => true      
  has_many :photos, :as => :photographable

end


class Photo < ActiveRecord::Base
    belongs_to :photographable, :polymorphic => true
    mount_uploader :image, ImageUploader
end

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1 activeadmin


    【解决方案1】:

    在 app/admin/home.rb 中尝试这样的操作:

    form do |f|
      f.inputs "Details" do
        f.name
      end
    
      f.has_many :photos do |photo|
        photo.inputs "Photos" do
          photo.input :field_name 
          #repeat as necessary for all fields
        end
      end
    end
    

    确保在您的家庭模型中包含此功能:

    accepts_nested_attributes_for :photos
    

    我从另一个堆栈溢出问题修改了这个:How to use ActiveAdmin on models using has_many through association?

    【讨论】:

    • 谢谢伙计,但一旦我使用 f.has_many 我得到一个错误:未定义的方法 `new_record?'对于 nil:NilClass
    • 可能跟多态关联有关系?
    • 我也得到了未定义的方法'new_record?'对于 nil:NilClass 错误。 @agente_secreto 你是怎么解决的?
    • 您需要在 Parent 模型中添加 Accept_nested_attributes_for :children - 这就是解决方法
    • 我必须使用f.input :name 而不是f.name
    【解决方案2】:

    你可以试试这个:

    form do |f|
      f.semantic_errors # shows errors on :base
      f.inputs          # builds an input field for every attribute
    
      f.inputs 'Photos' do
        f.has_many :photos, new_record: false do |p|
          p.input :field_name
          # or maybe even
          p.input :id, label: 'Photo Name', as: :select, collection: Photo.all
        end
      end
    
      f.actions         # adds the 'Submit' and 'Cancel' buttons  
    end
    

    另外,您可以查看https://github.com/activeadmin/activeadmin/blob/master/docs/5-forms.md(参见嵌套资源

    【讨论】:

      【解决方案3】:

      我猜您正在寻找嵌套模型的表单。看看下面的 railscasts。

      http://railscasts.com/episodes/196-nested-model-form-part-1

      http://railscasts.com/episodes/197-nested-model-form-part-2

      关于 active_admin 我不能告诉你太多,但我认为这对处理嵌套模型应该没有影响。

      【讨论】:

      • 太好了,我去看看,railscasts 总是很有用的
      【解决方案4】:

      我有一个 has_one 模型,如下所示:

      f.has_many :addresses do |a|
        a.inputs "Address" do
          a.input :street  ... etc.
      

      虽然这正确反映了我们使用f.has_oneAddress(这是一个多态模型)的关联,但失败了。所以我换成了has_many,一切都很好。除了现在我们必须阻止我们的用户为同一个实体创建多个地址。

      【讨论】:

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