(警告:Clueless Rails Newbie!)
在我的专辑视图的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
答案 0 :(得分:6)
如果您想拥有可从视图访问的方法,则几乎没有选项:
但我认为你可以做得更好。首先,不要考虑任何发现方法。把它放在控制器中。其次,您不需要指定自己的查找方法。可能你的模特中有这样的东西:
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的最佳地点 - 至少对我而言。
答案 1 :(得分:2)
在相册模型中。虽然需要自我:
def self.find_albums_with_feature(feature_id)