6

にアップグレードしたところRails 3.2.10、RailsAdminを介してレコードを更新するときに以前は表示されなかったエラーメッセージが表示されます。

ActiveRecord::HasManyThroughNestedAssociationsAreReadonly at /admin/vendor/12/edit

Message Cannot modify association 'Vendor#categories' because it goes through more than one other association.

これは私のVendorモデルです:

class Vendor < ActiveRecord::Base
  attr_accessible :name, :description, :banner_image, :logo_image, :intro_text, :thumb_image, :category_ids, :product_ids, :user_id, :remove_banner_image, :banner_image_cache, :remove_logo_image, :logo_image_cache
    mount_uploader :banner_image, ImageUploader
    mount_uploader :logo_image, ImageUploader
    mount_uploader :thumb_image, ImageUploader

    has_many :products, :dependent => :destroy
    has_many :categories, :through => :products
    belongs_to :owner, :class_name => "User",
        :foreign_key => "user_id"   
end

これは私のCategoryモデルです:

class Category < ActiveRecord::Base
  attr_accessible :name, :product_ids, :category_ids
    has_many :category_products do
         def with_products
           includes(:product)
         end
       end

  has_many :products, :through => :category_products

end

これは私のProductモデルです:

class Product < ActiveRecord::Base
  attr_accessible :name, :description, :price, :vendor_id, :image, :category_ids, :sku, :remove_image, :image_cache
    mount_uploader :image, ImageUploader

    belongs_to :vendor
    has_many :category_products do
           def with_categories
             includes(:category)
           end
    end

    has_many :categories, :through => :category_products

end

これは私のCategoryProductモデルです:

class CategoryProduct < ActiveRecord::Base
  attr_accessible :product_id, :category_id, :purchases_count

    belongs_to :product
  belongs_to :category

  validates_uniqueness_of :product_id, :scope => :category_id
end
4

2 に答える 2

0

関連付けを読み取り専用としてマークすると、rails_admin はベンダーのフォームにカテゴリ フィールドを生成しません。

has_many :categories, -> { readonly }, through: :products

于 2014-08-03T19:15:37.553 に答える
0

これは、アソシエーションがネストされているために発生します。つまり、(レールソースから):結合テーブルが複数ある場合、スルーアソシエーションがネストされています...これがあなたのケースです。

どうやら回避策 (私はテストしていません) は、関連付けを自動保存する必要がないことをベンダーに伝えています。

has_many :categories, :through => :products, :autosave => false
于 2013-01-14T09:06:30.057 に答える