2016-03-02 3 views
1

Я использую gem 'ransack' для поиска записей.Ransack search include параметр

Страница, на которой я программирую, начинается ТОЛЬКО выпадающим списком, чтобы выбрать @department. После этого я хочу, чтобы Ransack искал в пределах @department.

Мне нужно указать дополнительный параметр department=2 с параметрами поиска Ransack. (Он работает, если я вставляю его в URL-адрес браузера).

Browser URL после того, как я печатаю в отделе = 2

http://localhost:5000/departments/costfuture?department=2&utf8=%E2%9C%93&q%5Bid_eq%5D=&q%5Bproject_year_eq%5D=&q%5Boriginal_year_eq%5D=&q%5Bclient_id_eq%5D=43&q%5Blocation_name_cont%5D=&q%5Bproject_name_cont%5D=&q%5Bcoststatus_id_in%5D%5B%5D=&q%5Bcoststatus_id_not_in%5D%5B%5D=&q%5Brebudget_true%5D=0&q%5Bnew_true%5D=0&q%5Bconstruction_true%5D=0&q%5Bmaintenance_true%5D=0&commit=Search 

Это контроллер:

def costfuture 

    @departments = current_user.contact.departments 
    if params[:department] 
     @department = Department.find(params[:department]) 
     @search = @department.costprojects.future.search(params[:q]) 
     @costprojects = @search.result.order(:department_priority) 
    end 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @departments } 
    end 
    end 

Я попробовал это в представлении:

<%= search_form_for @search, url: departments_costfuture_path(:department => @department.id) do |f| %> 

Но, в результате URL отсутствует department=2.

ответ

1

Если вы хотите передать опцию department через рыскать, вы можете сделать это со скрытым полем в вашем search_form_for:

<%= search_form_for @search, url: departments_costfuture_path do |f| %> 
    <%= f.hidden_field :department_eq, value: @department.id %> 
    <%# Other form code here %> 
<% end %> 

Но если вы хотите найти определенный отдел, то лучше использовать Rails маршрутов для этого. Вы можете создать URL-адрес, как /departments/2/costfuture путем изменений config/routes.rb:

resources :departments do 
    get 'costfutures', on: :member 
end 

Теперь вы можете использовать полученный URL помощник для создания ссылки, которая будет устанавливать params[:id], и вы можете использовать его для получения @department.

+0

Спасибо за помощь - но эта строка дает мне «неопределенный метод« merge »для 2: Fixnum» – Reddirt

+0

Это будет сложно найти, не видя полной ошибки и действия вашего контроллера (и, возможно,). Не могли бы вы добавить их на свой вопрос, пожалуйста? –

+0

Это работало в представлении '<% = f.hidden_field: department_eq,: value => @ department.id%>'. Но мне нужно извлечь department = x из 'params [: q]'. Знаете, как это сделать? – Reddirt