Dam*_*che 2 ruby ruby-on-rails
我目前有2个型号设置:
class Topic < ActiveRecord::Base
belongs_to :category
end
class Category < ActiveRecord::Base
has_many :topics
end
Run Code Online (Sandbox Code Playgroud)
我现在正在尝试使用rails控制台中关联的类别创建主题:
t = Topic.new :name => "Test", :category => Category.find(1)
Run Code Online (Sandbox Code Playgroud)
麻烦的是模型有category_id,所以我需要使用:
c = Category.find(1)
t = Topic.new :name => "Test", :category_id => c.id
Run Code Online (Sandbox Code Playgroud)
但是,我已经多次看到了使用:category而不是:category_id并传入类别对象而不是对象id的能力.我哪里错了?
当我做:
c = Category.find(1)
t = Topic.new :name => "Test", :category => c
Run Code Online (Sandbox Code Playgroud)
我收到:
ActiveRecord::UnknownAttributeError: unknown attribute: category
Run Code Online (Sandbox Code Playgroud)
你应该能够这样做:
c = Category.find(1)
t = Topic.new :name => "Test", :category => c
Run Code Online (Sandbox Code Playgroud)
模型上的关联定义可以让您执行此操作.
有趣的是,您可以使用:category_id并且仍然只是传入对象,它将为您获取ID:
t = Topic.new :name => "Test", :category_id => c
Run Code Online (Sandbox Code Playgroud)
另一种方法可以做得更好一点:
t = c.topics.build(:name => "Test") # Builds an object without saving
t = c.topics.create(:name => "Test") # Builds an object and saves it
Run Code Online (Sandbox Code Playgroud)