2

メッセージとユーザー。私のメッセージはユーザーに属し、ユーザーは多くのメッセージを持っています。

私の見解の1つでは、次のようなものを呼び出します

current_user.home_messages?

そして私のユーザーモデルでは、私は...

  def home_messages?
    Message.any_messages_for
  end

最後に、私のメッセージ モデルでは、

scope :any_messages_for

    def self.any_messages_for
        Message.where("to_id = ?", self.id).exists? 
    end

メッセージモデルで current_users id を取得しようとしています。一番上のビューからパラメーターとして current_user を渡すことができましたが、私はやっているので

current_user.home_messages?

セルフを使った方がいいと思いました。しかし、どうすれば正しく参照できますか?

ありがとうございました。

4

3 に答える 3

7

ラムダを使用できます。Message モデルで:

scope :any_messages_for, lambda {|user| where('user_id = ?', user.id)}

これは次のように機能します。

Message.any_messages_for(current_user)

また、メッセージが見つかった場合に true を返すメソッドをユーザー モデルに追加することもできます。この場合、インスタンス メソッドを使用し、インスタンスを self として渡します。

def home_messages?
  return true if Message.any_messages_for(self)
end

しかし、実際には、上記のいずれも記述せずに、 User モデルでこのようなことを行うだけです。これは、:has_many および :belongs_to 関連付けを宣言するときに作成される Rails メソッドを使用します。

def home_messages?
  return true if self.messages.any?
end
于 2012-04-23T05:14:29.710 に答える
2

次のいずれかを行うことができます

def self.any_messages_for(id) #This is a class method
    Message.where("to_id = ?", id).exists? 
end

上記のメソッドを呼び出すには、あなたがしなければならない

User.any_messages_for(current_user.id) #I am assuming any_messages_for is in `User` Model

また

def any_messages_for #This is a instance method
    Message.where("to_id = ?", self.id).exists? 
end

上記のメソッドを呼び出すには、あなたがしなければならない

current_user.any_messages_for
于 2012-04-23T04:49:28.340 に答える
1

Message クラスのこのようなものはあまり意味がありません:

scope :any_messages_for

def self.any_messages_for
    Message.where("to_id = ?", self.id).exists? 
end

マクロはそれscope自体でクラス メソッドを定義し、別の引数も必要です。また、スコープは多かれ少なかれ、定型化された一連のクエリ パラメータを定義するためのものであるため、any_messages_forメソッドはあまりスコープ的ではありません。私はあなたが取り除くべきだと思いますscope :any_messages_for

any_messages_forクラスメソッドでは、selfはクラス自体になるためself.id、ユーザー ID にはならないため、 のプレースホルダー値としては役に立ちませんwhere

メッセージには、次のようなものがもっとあるはずです。

def self.any_messages_for(user)
  where('to_id = ?', user.id).exists?
  # or exists?(:to_id => user.id)
end

そして、ユーザーで:

def home_messages? Message.any_messages_for(self) 終了

すべてが整理されたら、あなたは言うことができますcurrent_user.home_messages?.

于 2012-04-23T04:52:27.393 に答える