pez*_*ser 2 ruby controller model ruby-on-rails
(警告:Clueless Rails Newbie!)
在我的专辑视图的show.html.erb中,我在相册控制器中调用了一个公共方法:
<% albums_feature = find_albums_with_feature(feature.id) %>
Run Code Online (Sandbox Code Playgroud)
它会生成NoMethodError.
所以我将方法复制到我的Album模型中并尝试从视图中调用它:
<% albums_feature = Album.find_albums_with_feature(feature.id) %>
Run Code Online (Sandbox Code Playgroud)
但这也会得到一个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
Run Code Online (Sandbox Code Playgroud)
如果您想拥有可从视图访问的方法,则几乎没有选项:
但我认为你可以做得更好.首先,不要考虑任何发现方法.把它放在控制器中.其次,您不需要指定自己的查找方法.可能你的模特中有这样的东西:
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
Run Code Online (Sandbox Code Playgroud)
有了它,您可以找到具有以下特定功能的相册:
@feature = Feature.find(id)
@albums = @feature.albums
Run Code Online (Sandbox Code Playgroud)
要么
@albums = Feature.find(id).albums
Run Code Online (Sandbox Code Playgroud)
它应该在你的控制器中.在视图中,您应该只显示结果.
如果您正在寻找有关关联的更多信息,请查看此处:http://guides.rubyonrails.org/association_basics.html.我认为这是你可以了解Rails的最佳地点 - 至少对我而言.
| 归档时间: |
|
| 查看次数: |
1180 次 |
| 最近记录: |