rails,如何在功能上传递自我

Sas*_*sha 2 parameters ruby-on-rails self

消息和用户.我的消息belongs_to用户和用户has_many消息.

在我的一个观点中,我称之为

current_user.home_messages?
Run Code Online (Sandbox Code Playgroud)

在我的用户模型中,我有......

  def home_messages?
    Message.any_messages_for
  end
Run Code Online (Sandbox Code Playgroud)

最后在我的消息模型中,我有

scope :any_messages_for

    def self.any_messages_for
        Message.where("to_id = ?", self.id).exists? 
    end
Run Code Online (Sandbox Code Playgroud)

香港专业教育学院一直试图在我的消息模型中获取current_users id.我可以从我的视图中传递current_user作为参数,但是我正在做

current_user.home_messages?
Run Code Online (Sandbox Code Playgroud)

我认为如果我使用自己会更好.但我该如何正确引用呢?

谢谢.

rob*_*ies 7

你可以使用lambda.在您的消息模型中:

scope :any_messages_for, lambda {|user| where('user_id = ?', user.id)}
Run Code Online (Sandbox Code Playgroud)

这将是这样的:

Message.any_messages_for(current_user)
Run Code Online (Sandbox Code Playgroud)

如果找到任何消息,您可以向用户模型添加一个方法以返回true.在这种情况下,您使用实例方法并将实例作为self传递:

def home_messages?
  return true if Message.any_messages_for(self)
end
Run Code Online (Sandbox Code Playgroud)

但实际上,我只是在User模型中做这样的事情,而不必编写上述任何内容.这使用在声明:has_many和:belongs_to association时创建的Rails方法:

def home_messages?
  return true if self.messages.any?
end
Run Code Online (Sandbox Code Playgroud)