我在Rails 3 app中关联了模型User
和Channel
。 Channel
是在User
创建
class User < ActiveRecord::Base
before_create do
self.channels.build
end
has_many :channels
end
class Channel < ActiveRecord::Base
belongs_to :user
validations block
...
end
问题是,如果Channel的验证不会通过User
,则会在数据库中创建,Channel
则不会。在一个'交易'中创建Channel
和User
的回调地点Channel
创建?或者,也许还有另一种正确的方法吗?
提前致谢。
UPD1:
Channel
创建放置在模型中的User
自动创建,因为在某些情况下创建的对象不会调用控制器。
答案 0 :(得分:2)
您可以使用“accepts_nested_attributes_for”
class User&lt;的ActiveRecord :: Base的
has_many:频道
accepts_nested_attributes_for:channels
结束
类频道&lt;的ActiveRecord :: Base的
belongs_to:用户
验证块
端
答案 1 :(得分:1)
使用validates :channels, associated: true
。
您应该检查一下您的频道验证,因为如果它没有保存,那么您正在做一些您的应用不期望的事情。
答案 2 :(得分:1)
你想的太多了。这是非常常见的情况,并且有一个惯例。
首先在Pedro说,你需要验证Channel模型中的关联。这将阻止在没有user_id的情况下保存频道。
然后,在控制器的create
操作中,您只需确保包含用户对象在内的所有参数都被发送到此处进行创建。