我目前有2个型号设置:
class Topic < ActiveRecord::Base
belongs_to :category
end
class Category < ActiveRecord::Base
has_many :topics
end
我现在正在尝试使用rails控制台中关联的类别创建主题:
t = Topic.new :name => "Test", :category => Category.find(1)
麻烦是模型有category_id,所以我需要使用:
c = Category.find(1)
t = Topic.new :name => "Test", :category_id => c.id
但是,我已经多次看到了使用:category而不是:category_id的能力,并传递了类别对象而不是对象id。我哪里错了?
当我这样做时:
c = Category.find(1)
t = Topic.new :name => "Test", :category => c
我收到:
ActiveRecord::UnknownAttributeError: unknown attribute: category
答案 0 :(得分:5)
你应该能够做到这一点:
c = Category.find(1)
t = Topic.new :name => "Test", :category => c
模型上的关联定义可以让你这样做。
有趣的是,您可以使用:category_id并且仍然只是传入对象,它将为您获取ID:
t = Topic.new :name => "Test", :category_id => c
另一种方法可以做得更好一点:
t = c.topics.build(:name => "Test") # Builds an object without saving
t = c.topics.create(:name => "Test") # Builds an object and saves it
答案 1 :(得分:0)
这是对我有用的MRE
u = User.first
Trainer.create(name: "John", user: u)
请注意,Trainer模型中没有“用户”列,只有user_id,但是当我们在Trainer中.create
记录时,我们仍然使用user
(rails知道要为该用户放置id在user_id
中