Rails 3.2.3 を使用して、User モデルと Message モデルを使用しています。各メッセージはユーザーが所有し、各メッセージにはオプションの 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
アプリ/モデル/メッセージ.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>)
必須ではなくfrom_user
、オプションを埋めていることがわかりました。owner
どの外部キー.build
が入力されるかを制御する方法はありますか? それとも.new
、すべての外部キーを手動で使用して割り当てる必要がありますか?
@message = Message.new(<accessible attributes>)
@message.owner = @user
@message.from_user = @another_user