1
class User < ActiveRecord::Base
  attr_accessible :email, :password, :picture, :username
  has_many :entries, :class_name => "Entry", :inverse_of => :user

  has_many :sent_messages, :inverse_of => :sender, :class_name => "Message", :foreign_key => "sender_id"
  has_many :recieved_messages, :inverse_of => :target, :class_name => "Message", :foreign_key => "target_id"

  has_many :mails, :inverse_of => :user
  ...
end

class Message < ActiveRecord::Base
  attr_accessible :message, :seen, :title
  belongs_to :sender, class_name => "User", :inverse_of => :sent_messages
  belongs_to :target, class_name => "User", :inverse_of => :recieved_messages
end

class CreateMessages < ActiveRecord::Migration
  def change
    create_table :messages do |t|
      t.references :sender
      t.references :target
      t.string :title
      t.string :message
      t.boolean :seen

      t.timestamps
    end
  end
end

私はこの2つのモデルを持っています。ユーザーの送信メッセージ (user.sent_messages) を取得しようとすると、次のようなエラーが発生します。

Could not find the inverse association for sent_messages (:sender in Message)

Railsを使って2日目なので些細なことかもしれませんが、わかりません。

PS: クラス User から :inverse_of => :sender を削除すると、user.sent_messages は機能しますが、私が理解しているように :inverse_of は重要です。

PPS: エラーが見つかりました! Message クラスでは、:class_name の代わりに class_name を使用していました。

4

1 に答える 1

0

そのため、可能な限り新しいスタイルのハッシュを使用することを好みます

class Message < ActiveRecord::Base
attr_accessible :message, :seen, :title
belongs_to :sender, class_name: 'User', inverse_of: :sent_messages
belongs_to :target, class_name: 'User', inverse_of: :recieved_messages
end

多くのことと同じように、それはしばしば個人的な好みの問題です:)

于 2013-03-15T12:45:49.723 に答える