我试图找出如何按特定字符串列出我的用户。在我的应用中,我Artist
有一个Artist_profile
到has_one
。在我的Artist_profile
中,我有genre
,这正是我试图解决的问题。我确实让它在if语句中工作,但它会查看每一个Artist
并找出匹配的那些。例如:
<% @artists.each do |artist| if artist.artist_profile.genre == "Rock" %>
<li><%= artist.id %></li>
<% end %>
我试图让它更像这样,所以它对我的数据库的压力更小:
<% @artists.rock.each do |artist| %>
<li><%= artist.id %></li>
<% end %>
和我的模特:
def self.rock
where(Artist.artist_profile.genre == "Rock")
end
但是我收到了这个错误:
undefined method `artist_profile' for #<Class:0x6962940>
我认为它与has_one
方法有关,但无论我尝试什么,似乎都无法实现这一点。
答案 0 :(得分:1)
您应该使用Joins方法。它允许您搜索关联模型中的字段。这与Includes方法不同,因为Joins方法不包括数据中的结果。例如,如果您想列出艺术家类型而不是ID,那么您可能希望使用包含。在你的代码中,你应该把:
public int Query(int id)
答案 1 :(得分:0)
您不能将范围称为Artist.artist_profile
,它是一个实例方法
您可以在rock
模型
ArtistProfile
结果将如下所示
class ArtistProfile < ActiveRecord::Base
belongs_to :artist
scope :rock, ->{where(genre: "Rock")}
...
并使用它:
@rock_profiles = ArtistProfile.rock
<% @rock_profiles.each do |profile| %>
<li><%= profile.artist_id %></li>
<% end %>