在rails控制台中创建关联模型?

时间:2012-04-18 18:20:59

标签: ruby-on-rails ruby

我目前有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

2 个答案:

答案 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