按特定字符串列出用户,rails

时间:2015-09-18 01:53:45

标签: ruby-on-rails ruby-on-rails-4

我试图找出如何按特定字符串列出我的用户。在我的应用中,我Artist有一个Artist_profilehas_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方法有关,但无论我尝试什么,似乎都无法实现这一点。

2 个答案:

答案 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 %>