Ошибка неопределенного метода Meta_Search

#ruby-on-rails #ruby #meta-search

#ruby-on-rails #ruby #мета-поиск

Вопрос:

Вступление: я работаю над приложением автодилера, поэтому у меня есть таблица с именем cars с полями carname_id и carmodel_id. carname_id и carmodel_id взяты из 2 таблиц с именами carnames и carmodels, где я храню все названия автомобилей и модели автомобилей. Теперь я настроил эти модели, чтобы иметь с ними связь, что-то вроде belongs_to и has_many (не имеет значения, потому что это работает так, как должно быть — я могу добавлять автомобили и модели в новый автомобиль из списка выбора)

Я использую meta_search для поиска по многим полям, и код в search_form выглядит как его

 <%= f.label :make_contains, "Select Car Make" %>
<%= f.select :make_contains, Car::CAR_MAKE %>

<%= f.label :model_contains, "Select Model" %>
<%= f.text_field :model_contains, Car::CAR_MODEL %>
  

поля make и model — это старые файлы в таблице cars, которые я использовал для хранения названия автомобиля и модели автомобиля. Но когда я захожу в форму расширенного поиска, я обнаружил, что застрял в динамическом выборе списка моделей.. У меня в car.rb есть список названий автомобилей, указанных для списка автомобилей, и список моделей автомобилей.. Я согласен, что это не лучший способ сделать это, поэтому мне пришлось создать 2 таблицы: carnames и carmodels, о которых я рассказал вам в начале.. Я все настроил, и add new car работает как ожидалось, я могу выбрать carname_id из таблицы carnames и carmodel_id из таблицы carmodels, и он отлично хранится в базе данных, используя форму, подобную этой:

 <%= f.label :carname_id, "Car name:" %>
<%= f.select :carname_id, @select_carnames %>

<%= f.label :carmodel_id, "Model name:" %>
<%= f.select :carmodel_id, @select_carmodels %>
  

таким образом, я отказываюсь от полей make и model из таблицы cars, поскольку у меня есть 2 новых рабочих поля carname_id и carmodel_id

Теперь к проблеме: как я могу выполнить поиск по carmodel_id и carname_id при создании подобной формы:

 <%= f.label :carname_id_contains, "Model name:" %>
<%= f.select :carname_id_contains, @select_carnames %>
<%= f.label :carmodel_id_contains, "Model name:" %>
<%= f.select :carmodel_id_contains, @select_carmodels %>
  

возвращает мне ошибку
неопределенный метод `carname_id_contains’ для МетаПоиска :: Searches::Car:0xb584b7a4

контроллер автомобилей:

 def index
  @search = Car.search(params[:search])
  @cars = @search.all.paginate :page => params[:page], :per_page => 18
  @select_carnames = Carname.find(:all).map{|element| [element.name, element.id]}
  @select_carmodels = Carmodel.find(:all).map{|element| [element.name, element.id]}

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @cars }
      format.json { render :json => @cars.map(amp;:attributes) }
    end
  end



   def new
    @car = Car.new
    @select_carnames = Carname.find(:all).map{|element| [element.name, element.id]}
    @select_carmodels = Carmodel.find(:all).map{|element| [element.name, element.id]}
        5.times { @car.assets.build }

        respond_to do |format|
          format.html # new.html.erb
          format.xml  { render :xml => @car }
        end

  end

def edit
  @car = Car.find(params[:id])}
  @select_carnames = Carname.find(:all).map{|element| [element.name, element.id]}}
  @select_carmodels = Carmodel.find(:all).map{|element| [element.name, element.id]}}<br />
  5.times { @car.assets.build }
end
  

Я надеюсь, что описал это как можно лучше, и я действительно был бы признателен за любую помощь и любые идеи по этому поводу. Спасибо всем за ваше время.

Ответ №1:

и ответ таков

 <%= f.label :carname_id_equals, "Model name:" %>
<%= f.collection_select :carname_id_equals, Carname.order('name ASC').all,  :id, :name, :include_blank => true %><br />

<%= f.label :carmodel_id_equals, "Model name:" %>
<%= f.collection_select :carmodel_id_equals, Carmodel.order('name ASC').all, :id, :name, :include_blank => true %><br />
  

В будущем мне нужно будет подробнее ознакомиться с Rdoc 🙂