【问题标题】:rails 3 search by belongs_torails 3 按 belongs_to 搜索
【发布时间】:2013-09-14 03:16:40
【问题描述】:

我在User 模型中有一个搜索方法。但我只能按用户列搜索。用户belongs_to公司型号。

问题:我也想通过user.company.name 搜索用户。我该怎么做?

用户.rb

class User < ActiveRecord::Base
  attr_accessible :email, :name, :password, :password_confirmation, :developer, :admin, :company_id, :boss_id, :company
  belongs_to :company

  def self.search(search)
    if search
      q = "%#{search}%"
      where('name LIKE ? OR 
             company_id LIKE ?',
         q,q)
    else
      scoped
    end
  end

end

index.html.erb

<% provide(:title, 'Users') %>
<h1>Users</h1>

<%= form_tag users_path, :method => 'get' do %>
  <%= hidden_field_tag :direction, params[:direction] %>
  <%= hidden_field_tag :sort, params[:sort] %>
  <p>
    <%= text_field_tag :search, params[:search] %>
    <%= submit_tag "Search", :name => nil %>
  </p>
<% end %>

users_controller.rb

class UsersController < ApplicationController
    def index
        @users = User.where(:developer => false, :admin => false).search(params[:search]).order(sort_column + ' ' + sort_direction).paginate(:per_page => 10, :page => params[:page])
    end
end

【问题讨论】:

    标签: ruby-on-rails ruby search belongs-to


    【解决方案1】:

    试试这个

    def self.search(search)
        if search
          q = "%#{search}%"
    
          joins(:company).where('users.name LIKE ? OR 
                 companies.name LIKE ?',q,q)
        else
          scoped
        end
      end
    

    【讨论】:

      【解决方案2】:
      @users = User.joins(:company).where(companies: {name: name}, developer: false, admin: false)
      

      现在您只需在参数中输入您的公司名称。

      【讨论】:

        猜你喜欢
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-24
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 1970-01-01
        相关资源
        最近更新 更多