搜索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(不是名称)..由于之前

嗯…首先,如果您只想搜索一个division-category-brand,则只需为每个项目更改一个文本输入视图(但最好使用select/multiselect)。

使用文本输入:

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

  • 项。b .将搜索方法改为

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。

最新更新