使用 Rails 3.2.3,我有用户和消息模型。每条消息都归一个用户所有,每条消息都有一个可选的 from_user 字段,该字段也采用 user.id。
应用程序/模型/user.rb
class User < ActiveRecord::Base
has_many :messages, :foreign_key => "owner_id", :inverse_of => :owner
has_many :messages, :foreign_key => "from_user_id", :inverse_of => :from_user
end
应用程序/模型/message.rb
class Message < ActiveRecord::Base
belongs_to :owner, :class_name => "User", :inverse_of => :messages
validates :owner, :presence => true # Every message must have an owner_id
belongs_to :from_user, :class_name => "User", :inverse_of => :messages
end
我看到的问题是.build
方法。使用的主要原因.build
是实例化一个(可能受保护的)外键,对吧?(请参阅有关 Active Record 关联的Rails 指南:“将创建通过其外键的链接。”)但是当我运行时
@message = @user.messages.build(<accessible attributes>)
我发现它是在填写 optionalfrom_user
而不是强制的owner
。
有什么方法可以控制.build
填写哪个外键?还是我只需要.new
手动使用和分配所有外键?
@message = Message.new(<accessible attributes>)
@message.owner = @user
@message.from_user = @another_user