在Ruby On Rails 4上搜索[帮助]

时间:2015-10-06 10:14:59

标签: ruby-on-rails-4

RoR上的新手。我想搜索部门,类别和品牌(按名称,而不是ID)。我有一个问题,找出一个搜索功能。希望我可以摆脱我的问题。我该怎么做才能转换(division_id) - > (division_name)等?

**#Model**

item.rb :
  belongs_to :division
  belongs_to :category
  belongs_to :brand

  def self.search(params)
    items = Item.all
    items = items.where("division_id BETWEEN #{params[:division_from].to_i} AND #{params[:division_to].to_i}") if params[:division_from].present?  
    items = items.where("category_id BETWEEN #{params[:category_from].to_i} AND #{params[:category_to].to_i}") if params[:category_from].present?  
    items = items.where("brand_id BETWEEN #{params[:brand_from].to_i} AND #{params[:brand_to].to_i}") if params[:brand_from].present? 
  end

category.rb :
  has_many = items

division.rb :
  has_many = items

brand.rb :
    has_many = items

**#View**

items- index.html.erb

  <fieldset><legend>Filter</legend></fieldset>
    <div class="panel-body">
      <div class="row">
        <%= form_tag search_items_path, class: "form-horizontal bucket-form", remote: true do %>
          <div class="col-md-6">
            <div class="form-group">
              <div class="text-field">
                <div class="col-md-10">
                  <td>Division</td>
                    <div class="input-group input-large">
                       <%= text_field_tag 'division_from','', class: "form-control dpd1" %>
                       <span class="input-group-addon">To</span>
                       <%= text_field_tag 'division_to','', class: "form-control dpd1" %>
                    </div>
                  <td>Category</td>
                    <div class="input-group input-large">
                       <%= text_field_tag 'category_from','', class: "form-control dpd1" %>
                       <span class="input-group-addon">To</span>
                       <%= text_field_tag 'category_to','', class: "form-control dpd1" %>
                    </div>
                  <td>Brand</td>
                    <div class="input-group input-large">
                       <%= text_field_tag 'brand_from','', class: "form-control dpd1" %>
                       <span class="input-group-addon">To</span>
                       <%= text_field_tag 'brand_to','', class: "form-control dpd1" %>
                    </div>
                    <div class="btn-group">
                      <%= submit_tag 'Search', class: "btn btn-primary" %>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          <% end %>
        </div>
      </div>

**#Controller**

items_controller.rb :
   def search
     @items = Item.search(params)
     respond_to do |format|
       format.js
     end
   end

如果我执行我的代码,我会按ID(而不是名字)进行搜索..感谢

1 个答案:

答案 0 :(得分:0)

嗯..首先,如果您只想搜索一个分类品牌,请更改每个项目的视图只有一个文本输入(但最好使用select / multiselect)。

使用文字输入:

  • 每个类只有一个文本输入 例如<%= text_field_tag 'brand','', class: "form-control dpd1" %>

  • item.rb中的
  • 将搜索方法更改为此

def self.search(params) items = Item.all items = items.where(division_id:Division.find_by_name(params[:division])) if params[:division].present? items = items.where(category_id:Category.find_by_name(params[:category])) if params[:category].present? items = items.where(brand_id:Brand.find_by_name(params[:brand])) if params[:division].present? end

当您未在视图中填写正确的名称时,它将无效,因此我建议使用select / multiselect。 我希望它能奏效。