1

我有两个模型UsersTags. 一个用户has_and_belongs_to_many tags,一个标签has_and_belongs_to_many users

假设我想搜索所有已启用的用户,这些用户被标记为 environment。

目前我像这样点击标签控制器的显示动作:

http://localhost:3000/tags/environment?search=enabled

我正在建立这样的搜索:

tag_controller.rb

 def show
    @users = Tag.search(params)
    @tag = params[:id]
    respond_with @users
  end

tag.rb 模型

def self.search(term)
  if term
   where(slug:term[:id]).first.users
  end
end

我很快意识到这根本没有意义。假设我想搜索用户的关联属性,该属性在 params[:search] 中传递,说我想通过@user.enabled 过滤它们?或@user.zipcode。

如何以 RESTful 方式使用 Rails 跨两个模型构建复杂查询?

4

1 回答 1

1
User.where(enabled: true).joins(:tags).where(term: 'environment')

只是要注意不要enabledonTagtermon,User否则您必须在表名前面加上前缀。

编辑:带前缀

User.where('users.enabled = ?', true).joins(:tags).where('tags.term = ?', 'environment')
于 2013-07-21T21:11:42.913 回答