我有两个CS文件,一个叫Articles
,另一个叫Reviews
。
review
文件与articles
的关联不是通过ID,而是通过称为article_reference
的事物。如何将关联设置为不同于ID的内容?
因此,在控制台中,我使用articles
创建了rails g model Article name content article_reference
模型。
接下来,我像这样创建了reviews
模型:
rails g model Review grade comment article_reference article:references
这是我的模特:
Article.rb
class Article < ApplicationRecord
self.primary_key = "reference_article"
has_many :reviews
end
Review.rb
class Review < ApplicationRecord
belong_to :site, primary_key: 'reference_article'
end
由于执行rake任务,我将文章数据导入数据库:
desc "Importing articles from CSV"
task import_site: :environment do
path = Rails.root.join('lib', "articles.csv")
CSV.foreach(path, :headers => true, encoding: "UTF-8") do |row|
Articles.create(row.to_hash)
end
end
desc "Importing reviews from CSV"
task import_reviews: :environment do
path = Rails.root.join('lib', "reviews.csv")
CSV.foreach(path, :headers => true, encoding: "UTF-8") do |row|
row["reference_article"] = "reference_article"
Review.create(row.to_hash)#Model is the name of your model
end
end
这是我的schema.rb
:
create_table "parts", force: :cascade do |t|
t.string "reference_part"
t.string "reference_site"
t.string "part_type_designation"
t.bigint "site_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["site_id"], name: "index_parts_on_site_id"
end
create_table "sites", force: :cascade do |t|
t.string "reference_site"
t.string "nom"
t.string "address_line1"
t.integer "zipcode"
t.string "city"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_foreign_key "parts", "sites"
end
从文章导入数据的任务很好,但是对于评论来说,它是空的。
所以我看了很多不同的教程,但似乎没人能用(因为它太旧或不适用于我的问题)。
我希望将两个文件导入到我的数据库中,并将review
模型与我的article
模型相关联。
如果有人看到我的代码有什么问题,我将不胜感激!
非常感谢
更新
通过以下操作,我成功导入了我的review
文件:
task import_reviews: :environment do
filename = Rails.root.join('lib', "reviews.csv")
CSV.foreach(filename, :headers => true, encoding: "UTF-8") do |row|
row["reference_article"] = :reference_article
Review.create!(row.to_hash)#Model is the name of your model
end
puts "Reviews added"
end
在我的optional: true
的{{1}}中添加一个belongs_to :article
但是,我的数据库中仍然有一个
review.rb
。