消息和用户。我的消息belongs_to用户和用户has_many消息。
在我的一个观点中,我称之为
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?
我认为如果我使用自己会更好。但我该如何正确引用呢?
谢谢。答案 0 :(得分:7)
你可以使用lambda。在您的消息模型中:
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 associations:
时创建的Rails方法def home_messages?
return true if self.messages.any?
end
答案 1 :(得分: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
OR
def any_messages_for #This is a instance method
Message.where("to_id = ?", self.id).exists?
end
要调用以上方法
current_user.any_messages_for
答案 2 :(得分: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
。
你应该在Message中有更多这样的东西:
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(个体经营) 端
完成所有操作后,您可以说current_user.home_messages?
。