0

Message と User の 2 つのクラスがあります。メッセージには、送信者 ID と受信者 ID の両方がユーザーの外部キーがあります。@message.sender.name と @message.recipient.name のように、送信者と受信者の両方のユーザーを取得できる関係を構築する方法

私はこの方法でそれをやろうとしました:

class Message < ActiveRecord::Base  

  belongs_to :sender, :class_name => 'User', :foreign_key => 'sender'
  belongs_to :recipient, :class_name => 'User', :foreign_key => 'recipient'

end   

class User < ActiveRecord::Base

  has_many :recivied_messages, :class_name => 'Message', :foreign_key => 'recipient'
  has_many :send_messages, :class_name => 'Message', :foreign_key => 'sender'
end

たとえば、@message.recipient.nameにアクセスしようとすると、「未定義のメソッド「名前」」と表示されます

4

1 に答える 1

2

:class_nameプロパティを使用して、外部キーに使用するクラスを設定できます。

class Message < ActiveRecord::Base
  has_one :sender, :class_name => User
  has_one :recipient, :class_name => User
end

class User < ActiveRecord::Base
  belongs_to :sent_messages, :class_name => Message
  belongs_to :received_messages, :class_name => Message
end

また、外部キーにsender_idandを使用していると言いますが、コードにはandがあります。それらをとに変更してみましたか? そう:recipient_id:foreign_key => 'sender':foreign_key => 'recipient':foreign_key => 'sender_id':foreign_key => 'recipient_id'

class Message < ActiveRecord::Base
  has_one :sender, :class_name => User, :foreign_key => 'sender_id'
  has_one :recipient, :class_name => User, :foreign_key => 'recipient_id'
end

class User < ActiveRecord::Base
  belongs_to :sent_messages, :class_name => Message, # ...etc
  belongs_to :received_messages, :class_name => Message, # ...etc
end
于 2010-08-03T04:36:17.623 に答える