gpt4 book ai didi

ruby-on-rails - 不确定在哪里(模型或 Controller )定义我的查找方法

转载 作者:数据小太阳 更新时间:2023-10-29 08:21:47 25 4
gpt4 key购买 nike

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

在我的相册 View 的 show.html.erb 中,我在我的相册 Controller 中调用了一个公共(public)方法:

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

它生成一个NoMethodError

所以我将该方法复制到我的 Album 模型中并尝试从 View 中调用它:

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

但这也会得到一个NoMethodError

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

就其值(value)而言,该方法如下所示:

  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

最佳答案

如果你想拥有可从 View 访问的方法,你有几个选择:

  • 将其放入模型中
  • 将其放入助手
  • 将其放入 Controller 并添加一行“helper_method :find_albums_with_feature”

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

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

它应该在您的 Controller 中。在 View 中,您应该只显示结果。

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

关于ruby-on-rails - 不确定在哪里(模型或 Controller )定义我的查找方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/845607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com