【问题标题】:rails: exclude blank select_tag from urlrails:从 url 中排除空白 select_tag
【发布时间】:2012-08-16 20:30:18
【问题描述】:

我在 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

谢谢!

【问题讨论】:

    标签: ruby-on-rails filter scope


    【解决方案1】:

    你需要做的是检查参数是否为空。

    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
    

    当您提交表单时,正在设置变量。就是这样,它们有空白值。所以你需要检查它们是否为空白而不是它们是否存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-06
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 2019-12-18
      相关资源
      最近更新 更多