簡體   English   中英

RANSACK GEM-搜索關聯-Rails 4

[英]RANSACK GEM - Searching with Associations - Rails 4

任何幫助和建議將不勝感激。

  • 我的公司模式有很多招聘人員(用戶),
  • 屬於公司的招聘人員(用戶)
  • 也屬於性別的招聘人員和性別有很多招聘人員

使用GEM搜查包,我試圖顯示公司中所有男性招聘人員(用戶),但我不確定公司控制器中“招聘人員”行動所需的代碼-無論如何,幫助和建議將不勝感激。 以下是我的文件:

楷模:

user.rb
class User < ActiveRecord::Base
belongs_to :company
belongs_to :category_gender
end

company.rb
class Company < ActiveRecord::Base
has_many :users
end

category_gender
class CategoryGender < ActiveRecord::Base
has_many :users
end

Companies_controller.rb

class CompaniesController < ApplicationController
  respond_to :html, :xml, :json
  before_action :set_company, only: [:show, :edit, :update, :destroy]
  # load_and_authorize_resource

........

  def recruiters
    @search = Company.search(params[:q])
    @companies = @search.result.includes(:users)

    @user = current_user
    @company = @user.company
  end
end

routes.rb

Rails.application.routes.draw do
  resources :companies do
    resources :comments, only: [:create, :destroy] 
    member do
      get 'recruiters'
    end
  end

  devise_for :users
  resources :users do
    resources :comments, only: [:create, :destroy] 
    resources :adverts 
    resources :blogs
    member do
      get 'applications'
      get 'applicants'
      get 'settings'
      get 'dashboard'
      get 'management'
    end
end

招聘人員.html.erb(意見檔案):

  <%= search_form_for @search, url: recruiters_company_path do |f| %>
    <div>
      <h3>gender</i></h3>
      <ul>
        <% CategoryGender.all.each do |gender| %>
          <li>
          <%= check_box_tag('q[category_gender_name_eq_any][]', gender.name) %>
          <%= gender.name %> (<%= gender.users.count %>)
          </li>
        <% end %>
      </ul>
    </div>
    <button><%= f.submit 'search' %></button>
  <% end %>

由於您正在搜索用戶。 然后,應在用戶模型而不是公司模型上調用.ransack方法。

recruiters方法中嘗試以下方法:

def recruiters
  @company = Company.find(params[:id])
  @users = User.ransack(params[:q]).result.where(company: @company)

  @user = current_user
end
  • 第一行:我使用@company = Company.find(params[:id])而不是@company = @user.company因為您正在使用Company resources路徑,其中recruiter方法是(如您所定義的)“成員”在您的routes.rb中)。

    @user.company的問題是,例如,某用戶瀏覽/companies/1/recruiters ,將要分配的@company將與瀏覽/companies/3/recruiters時的相同。 但按照慣例,由於id更改,這兩個路徑中的@company應該已經不同。

  • 第二行:我剛剛添加了謂詞.where(company: @company)以便將結果過濾到相應的公司。

然后,在您的recruiters.html.erb視圖文件中,只需添加如下內容:

...
...
<% @users.each do |user| %>
  <%= user.name %>
<% end %>
...
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM