2

(警告:无知的 Rails 新手!)

在我的相册视图的 show.html.erb 中,我在相册控制器中调用了一个公共方法

<% albums_feature = find_albums_with_feature(feature.id) %>

它生成一个NoMethodError

所以我将该方法复制到我的相册模型中,并尝试从视图中调用它:

<% albums_feature = Album.find_albums_with_feature(feature.id) %>

但这也会得到一个NoMethodError

我应该在哪里定义这个方法?

对于它的价值,该方法如下所示:

  def find_albums_with_feature(feature_id)
    albums_for_feature = Albums.find_by_sql(  
    ["select al.* from albums al, albums_features alfe
    where al.id = alfe.album_id
    and alfe.feature_id = ?", feature_id])
  end
4

2 回答 2

6

如果您想拥有可从视图中访问的方法,您有几个选择:

  • 把它放在模型中
  • 把它放在助手中
  • 把它放在控制器中并添加一行“helper_method:find_albums_with_feature”

但我认为你可以做得更好。首先,不要把任何寻找方法放在眼里。将其放入控制器中。其次,您不需要指定自己的查找方法。可能你的模型中有这样的东西:

class Album << ActiveRecord::Base
  has_many :albums_features
  has_many :features, :through => :albums_features
end

class AlbumsFeature << ActiveRecord::Base
  belongs_to :album
  belongs_to :feature
end

class Feature << ActiveRecord::Base
  has_many :albums_features
  has_many :albums, :through => :albums_features
end

有了它,您可以找到具有以下特定功能的专辑:

@feature = Feature.find(id)
@albums = @feature.albums

或者

@albums = Feature.find(id).albums

它应该在您的控制器中。在视图中,您应该只显示结果。

如果您正在寻找有关协会的更多信息,请查看此处: http: //guides.rubyonrails.org/association_basics.html。我认为这是了解 Rails 的最佳场所——至少对我来说是这样。

于 2009-05-10T16:42:45.327 回答
2

在相册模型中。虽然需要自己在前面:

def self.find_albums_with_feature(feature_id)
于 2009-05-10T16:28:20.667 回答