0

多くのProductモデルがありCategoriesCategory多くのモデルがありAttributesます。

class Product < ActiveRecord::Base    
  has_many :categories, :dependent => :destroy
  accepts_nested_attributes_for :categories, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true

  attr_accessible :categories_attributes, :comments, :name, :price, :available, :image, :remote_image_url
end

class Category < ActiveRecord::Base
  belongs_to :product
  has_many :attributes, :dependent => :destroy
  attr_accessible :name, :attributes_attributes

  accepts_nested_attributes_for :attributes, :reject_if => lambda { |a| a[:name].blank? }, :allow_destroy => true
end

class Attribute < ActiveRecord::Base
  belongs_to :category

  attr_accessible :name, :value, :is_key
end

私の問題は、Productモデルを更新しようとすると、次のエラーが発生することです。

undefined method `keys' for []:ActiveRecord::Relation

keysどのモデルにも属性はありませんがis_key、モデルには属性がAttributeあるので、そこが問題の原因だと考えています。

Product更新には次のフォームを使用しています。

.form_container
  = nested_form_for @product, :html => {:class => 'form'} do |f|
    - if @product.errors.any?
      #error_explanation
        %h2= "#{pluralize(@product.errors.count, "error")} prohibited this product from being saved:"
        %ul
          - @product.errors.full_messages.each do |msg|
            %li= msg

    .title
      Product fields

    .field
      = f.label :name
      = f.text_field :name, :class => :required
    .field
      = f.label :price
      = f.text_field :price, :class => :required
    .field
      = f.label :comments
      = f.text_area :comments
    .field
      = f.label :product_type
      = select_tag 'product_type', options_from_collection_for_select(@product_types, 'id', 'name'), { :class => '' }
    %br/
    .title
      Image

    .field
      = f.file_field :image, :class => :file
    .field
      = f.label :remote_image_url, 'or image URL'
      = f.text_field :remote_image_url
    %br/

    .title
      Specifications
    .field
      = f.fields_for :categories do |category|
        = render 'category_fields', :f => category
    .field
      = f.link_to_add "Add a category", :categories, :class => 'button_link'
    .field
      = f.label :available
      = f.check_box :available, {checked: true}
    .actions
      = f.submit submit_button_name, :class => :submit
4

1 に答える 1

1

この行を変更

has_many :attributes, :dependent => :destroy

has_many :category_attributes, :dependent => :destroy,  :class_name => 'Attribute'   

attr_accessible属性レールメソッドのビルドとの競合を避けるために残りなどと一緒に

于 2013-07-11T18:04:49.583 に答える