使用模型中的方法,从视图中调用它

我有一个属于用户的更新模型。 要显示一个用户的所有朋友的更新,我正在执行以下操作:

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数组。