0

index.html.erb(ユーザービュー)にフォームがあります:

<%= form_tag( '', :method => :get ) do %>

<% @company = Position.all.map { |p| [ p.company, p.company ] } %>
<%= select_tag "company", options_for_select((@company), params[:position_id]), { :include_blank => true, :reject_if => @company.blank? } %> 

<% @industry = Position.all.map { |p| [ p.industry, p.industry ] } %>
<%= select_tag "industry", options_for_select((@industry), params[:position_id]), { :include_blank => true, :reject_if => @industry.blank? } %> 

<%= submit_tag 'Filter', class: 'btn btn-large btn-primary' %>
<% end %>

およびコントローラー(ユーザーコントローラー):

def index
    if params[:company] && params[:industry]
      @users = User.companies(params[:company]).industries(params[:industry])
    elsif params[:company]
      @users = User.companies(params[:company])
    elsif params[:industry]
      @users = User.companies(params[:industry])
    else 
      @users = User.all
    end
end

ユーザーには、ポジションを通じて多くの企業や業界があります。

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation, :first_name, :last_name, :position_ids

  has_many :positions
  has_many :companies, :through => :positions
  has_many :industries, :through => :positions
  has_one :current_position, :class_name => "Position", :conditions => { :is_current => true }

  scope :companies, lambda { |*company| {:include => :positions, :conditions => ["positions.company = ?", company]} }
  scope :industries, lambda { |*industry| {:include => :positions, :conditions => ["positions.industry = ?", industry]} }
end

ユーザーコントローラーにifステートメントがあるにもかかわらず、会社または業界のいずれかのフィールドの空白のエントリを無視するという見方をすることができません。たとえば、空白の会社と「インターネット」業界フィルターは次のURLを返します。

... users?utf8 =%E2%9C%93&company =&industry = Internet&commit = Filter

URLが'company=&'を完全に除外するように、空白の会社フィールドを無視するようにコードを変更するにはどうすればよいですか?この場合、必要な結果が返されます。

... users?utf8 =%E2%9C%93&industry = Internet&commit = Filter

ありがとう!

4

1 に答える 1

0

あなたがする必要があるのは、パラメータが空白であるかどうかを確認することです。

if !params[:company].blank? && !params[:industry].blank?
  @users = User.companies(params[:company]).industries(params[:industry])
elsif !params[:company].blank? && params[:industry].blank?
    @users = User.companies(params[:company])
elsif !params[:industry].blank? && params[:company].blank?
    @users = User.companies(params[:industry])
else
    @users = User.all
end

フォームを送信すると、変数が設定されます。それだけで、それらは空白の値を持っています。したがって、それらが存在するかどうかではなく、空白であるかどうかを確認する必要があります。

于 2012-08-21T18:36:17.437 に答える