gpt4 book ai didi

ruby-on-rails - ActiveModel::MissingAttributeError:在将 has_many Assosiacion 与 Spree 结合使用时无法写入未知属性 'product_id'

转载 作者:数据小太阳 更新时间:2023-10-29 08:47:29 28 4
gpt4 key购买 nike

我正在尝试添加 Screenshot 的模型:belongs_to 与 SpreeProduct 的关联,它具有:has_many 与之关联。

当我运行这个时:

product = Spree::Product.create :name => 'Test', :price => 100, :description => 'description', available_on: Time.now, shipping_category_id: 'default'
product.screenshots << Screenshot.create(:attachment => open('SOME_IMAGE_URL'))

我得到“ActiveModel::MissingAttributeError”:

/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/attribute_methods/write.rb:47:in `write_attribute'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/attribute_methods/dirty.rb:70:in `write_attribute'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/attribute_methods.rb:358:in `[]='
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/association.rb:204:in `block in set_owner_attributes'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/association.rb:204:in `each'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/association.rb:204:in `set_owner_attributes'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/has_many_association.rb:34:in `insert_record'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/collection_association.rb:523:in `block (2 levels) in concat_records'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/collection_association.rb:367:in `add_to_target'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/collection_association.rb:522:in `block in concat_records'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/collection_association.rb:520:in `each'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/collection_association.rb:520:in `concat_records'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/collection_association.rb:137:in `block in concat'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/collection_association.rb:152:in `block in transaction'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:221:in `within_new_transaction'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/transactions.rb:209:in `transaction'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/collection_association.rb:151:in `transaction'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/collection_association.rb:137:in `concat'
/Users/maksim/.rvm/gems/ruby-2.0.0-p451@rails_4_0/gems/activerecord-4.0.4/lib/active_record/associations/collection_proxy.rb:943:in `<<'
/Users/maksim/Workspace/gamewanted/lib/tasks/screenshots.rake:8:in `block (2 levels) in <top (required)>'

这是屏幕截图模型的样子。

class Screenshot < Spree::Image
belongs_to :product
end

这是 SpreeProduct 模型覆盖。

Spree::Product.class_eval do
has_attached_file :preview_image // preview images work
has_many :screenshots
end

这里还有迁移文件。

class CreateScreenshots < ActiveRecord::Migration
def change
create_table :screenshots do |t|
t.references :product, index: true
t.timestamps
end
end
end

我还检查了 screenshots 表是否真的有 product_id 列:

   Column   |            Type             |    
------------+-----------------------------+
id | integer |
created_at | timestamp without time zone |
updated_at | timestamp without time zone |
product_id | integer |

最佳答案

好的,谢谢大家。我通过简单地直接从 ActiveRecord::Base 继承 Screenshot 而不是从 Spree::Image 继承 Screenshot 来解决它。

关于ruby-on-rails - ActiveModel::MissingAttributeError:在将 has_many Assosiacion 与 Spree 结合使用时无法写入未知属性 'product_id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23367999/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com