Mar*_*rry 6 activerecord ruby-on-rails-3
使用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
Run Code Online (Sandbox Code Playgroud)
应用程序/模型/ 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
Run Code Online (Sandbox Code Playgroud)
我看到的问题是该.build方法.使用的主要原因.build是实例化一个(可能受保护的)外键,对吧?(请参阅活动记录关联的Rails指南:"将创建通过其外键的链接.")但是当我运行时
@message = @user.messages.build(<accessible attributes>)
Run Code Online (Sandbox Code Playgroud)
我发现它填写了可选项from_user而不是强制项owner.
有没有办法控制哪个外键.build填写?或者我是否需要.new手动使用和分配所有外键?
@message = Message.new(<accessible attributes>)
@message.owner = @user
@message.from_user = @another_user
Run Code Online (Sandbox Code Playgroud)
ActiveRecord不喜欢你有2个同名的关联.您将不得不更改关联名称.这意味着您还必须提供class_nameattibute.也许是这样的:
has_many :owner_messages, :class_name => 'Message', :foreign_key => "owner_id", :inverse_of => :owner
has_many :user_messages, :class_name => 'Message', :foreign_key => "from_user_id", :inverse_of => :from_user
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1929 次 |
| 最近记录: |