如何为belongs_to关联播种?

Lea*_*RoR 5 ruby ruby-on-rails ruby-on-rails-3

我想播种我的Products并将它们分配给一个特定的UserStore.

Product.rb

class Product < ActiveRecord::Base

  belongs_to :user
  belongs_to :store

  def product_store=(id)
    self.store_id = id
  end
end
Run Code Online (Sandbox Code Playgroud)

注意:Storebelongs_to Business(:business_name)

Seed.rb

这是我的基本设置:

user = User.create(:username => 'user', :email => 'user2@email.com') 
store = Store.create(:business_name => 'store', :address => 'Japan')
Run Code Online (Sandbox Code Playgroud)

我尝试了这些,但他们没有工作:

# This gives random ID's ranging from 1 to 4425!?
user.products.create([{:name => "Apple", :product_store => Store.find_by_address('San Francisco, USA')}])

# This gives me undefined method 'walmart'.
 user.store.products.create([ {:name => "Apple"} ])
Run Code Online (Sandbox Code Playgroud)

有没有办法设置ID,所以我可以将我Products与a StoreUser


更新 -

我已经尝试了下面的答案,仍然没有成功.有谁知道另一种方法吗?

小智 8

虽然听起来您找到了解决方法,但解决方案可能对其他人感兴趣.

来自你原来的种子.rb

user = User.create(:username => 'user', :email => 'user2@email.com')
store = Store.create(:business_name => 'store', :address => 'Japan')
Run Code Online (Sandbox Code Playgroud)

创建商店

Store.create({
  user_id: user.id
  store_id: store.id
}, without_protection: true)
Run Code Online (Sandbox Code Playgroud)

在原始代码中,声明了剪切的"user"和"store"变量.代码将user_id/store_id(由Store模型中的belongs_to关系推断的模型列)分配给"user"和"store"变量中存在的id值.

"without_protection:true"关闭id字段的批量分配保护.这在种子文件中是完全可以接受的,但在处理用户提供的数据时应该非常谨慎地使用.


Lea*_*RoR 1

我所做的是将特定产品更新给特定用户,请参阅这个问题:

我可以在播种时将我的所有产品更新给特定用户吗?