![](/img/trans.png)
[英]Rails how to seed a table in seeds.rb with data from another table
[英]How to seed join table data from yaml file through seed.rb in Rails
我试图在我的seed.rb中添加将数据加载到ROR 3.2.5应用程序的联接表上的功能。
我有两个模型:Saft.rb和Keyword.rb,我想加入。
class Saft < ActiveRecord::Base
has_and_belongs_to_many :keyword, :join_table => "safts_keywords"
end
class Keyword < ActiveRecord::Base
attr_accessible :word
has_and_belongs_to_many :saft, :join_table => "safts_keywords"
end
我从yaml文件中为两者的数据集播种,例如:keyword_list.yml
---
- word: "12"
- word: "34"
我的Seed.rb的对应部分:
keywords_data = YAML.load_file(Rails.root.join('db/seeds/keywords_list.yml'))
keywords_data.each do |keyword|
h = Keyword.find_or_initialize_by_word(keyword['word'])
h.save
end
现在,我也想从yaml文件中为联接表添加初始数据集。 (safts_keywords.yml)
---
- saft_id: 1
keyword_id: 2
当我尝试通过以下方式加载数据时:
# Load the Join Table
safts_keywords_data = YAML.load_file(Rails.root.join('db/seeds/safts_keywords_list.yml'))
safts_keywords_data.each do |saftkeyword|
h = SaftKeyword.find_or_initialize_by_saft_id(saftkeyword['saft_id'],
:keyword_id => saftkeyword['keyword_id'])
h.save
end
我得到:
。
。
。
**调用db:structure:load_if_sql(first_time)
**调用db:create
**执行db:structure:load_if_sql
**调用db:seed(first_time)
**执行db:seed
**调用db:abort_if_pending_migrations(首次)
**调用环境
**执行db:abort_if_pending_migrations
耙子流产了!
未初始化的常量SaftKeyword
/Users/Stephan/Development/REPRO/saftzine_com/db/seeds.rb:99
/Users/Stephan/Development/REPRO/saftzine_com/db/seeds.rb:97:in`each'
/Users/Stephan/Development/REPRO/saftzine_com/db/seeds.rb:97
。
。
。
我该如何工作?
编辑:
我通过迁移创建了联接表。 它被命名为“ safts_keywords”,但Saft_Keyword在seed.rb中也不起作用。
HABTM联接表通常没有与之关联的模型,因为它们只是联接表而已。
这意味着这些关系将从一侧或另一侧建立。 假设我认为一个Saft
更可能具有多个Keywords
我将对此进行如下处理。
我不知道什么是Saft
,但如果您知道他们的身分证,我会推荐以下内容:
1:
- keyword1
- keyword2
- keyword3
2:
- keyword2
- keyword4
然后,您的种子文件为:
safts_keywords_data = YAML.load(Rails.root.join('db/seeds/safts_keywords_list.yml'))
safts_keywords_data.each do |saft_id,keywords|
saft = Saft.find(saft_id)
saft.keywords << keywords.map do |key|
Keyword.find_or_create_by(word: key)
end
end
如果有一种更清晰的方法来查找独特的Saft
我建议仅从可读性的角度来看,但这应该可以给您带来更清晰的画面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.