使用模型中的方法,从视图中调用它
我有一个属于用户的更新模型。 要显示一个用户的所有朋友的更新,我正在执行以下操作:
Update.where("user_id" => [array_of_friend_ids])
我知道“正确”的做法是创建一个方法来创建上面的数组。 我开始编写方法,但它只是半工作。 目前我在我的用户模型中有这个:
def self.findfriends(id) @friendarray = [] @registered_friends = Friend.where("user_id" => id) @registered_friends.each do |x| @friendarray << x.friend_id end return @friendarray end
我在视图中执行整个操作:
<% @friendarray <
然后我正在调用Update.where(“user_id”=> @friendarray)。 但显然我在这里以非常黑客的方式做事。 当Rails可以从视图中的模型和方法“看到”某些变量时,我有点困惑。 插入ID数组以查找更新的最佳方法是什么,因为我不应该在视图中使用太多逻辑?
Mattharick对使用协会是正确的。 您应该在问题描述中使用关联来解决您提到的问题。 如果我们在问题的标题处提出问题;
假设你有一个User
模型。
这两种方法不同:
def self.testing puts "I'm testing" end
另一个是:
def testing puts "I'm testing" end
注意self
关键字。 self
关键字使方法成为Class方法。 您可以从控制器或视图中调用它,例如: User.testing
。
但是没有测试的是实例方法。 可以这样称为:
u = User.last u.testing
第二个使您可以在模型中使用“实例”的属性。
例如,您可以像这样在该方法中显示您的实例的name
?
def testing puts "Look, I'm showing this instance's name which is: #{name}" end
这些都是强大的东西。
练习他们。
简单地为项目添加另一个关联。
class User < ActiveRecord::Base has_many :friendship has_many :friends, :through => :friendship, :class_name => User, :foreign_key => :friend_id has_many :friendship has_many :users, :through => :friendship end class Friendship < ActiveRecord::Base belongs_to :user belongs_to :friend, :class_name => User end
我不知道我的synrax是否正确,请试试。
友谊具有user_id和friend_id属性。
之后,您应该能够执行以下操作来获取朋友的更新:
User.last.friends.last.updates
您可以使用普通的活动记录查询而不是hacky数组。