Общий тег формы в форме помощника - PullRequest
0 голосов
/ 08 мая 2019

У меня есть форма для панели поиска, которая ищет проекты по названию. Проекты различаются по завершенным проектам , текущим проектам и проектам предложений . Эти три имеют одинаковую форму ожидаемого пути. Итак, я решил использовать общую форму в помощнике.

выполнено , предложение и незавершенное проекты используют разные действия в контроллере проектов. Я пробовал различать формы по params[:name], но это не работает. Есть ли какое-либо решение?

helper_method

module ProjectsHelper
  def form_for_projects_search_bar(condition1,condition2,condition3,&block)
   if condition1
     form_tag proposed_projects_path, method: :get, :html => {class: "form"}, &block

   elsif condition2
     form_tag completed_projects_path, method: :get, :html => {class: "form"}, &block

   elsif condition3
     form_tag projects_path, method: :get, :html => {class: "form"}, &block
   end

 end
end

файл формы

<%= form_for_projects_search_bar params[:proposed_projects].present?, params[:completed_projects].present?, params[:projects].present? do |form| %>
  <%= text_field_tag :term, params[:term],placeholder:"What are you looking for?", class: "search_field" %>
  <%= submit_tag 'Search', name: nil, class: "search_bar_button" %>
<% end %>

маршруты

projects_path   GET /projects(.:format)  projects#index
proposed_projects_path  GET /proposed_projects(.:format) projects#proposal
completed_projects_path GET /completed_projects(.:format) projects#completed

Я хочу проверить условие на основе имени параметра, например proposed_projects, composed_projects, projects. Если я делаю правильный путь в form.html.erb?.

Если есть другое решение?

Ответы [ 2 ]

0 голосов
/ 13 мая 2019
<%= form_for_projects_search_bar  params[:action]=="proposal", params[:action]=="completed", params[:action]=="progress" do  %>
  <%= text_field_tag :term, params[:term],placeholder:"What are you looking for?", class: "search_field" %>
<% end %>

дифференцируйте каждое действие следующим образом ... Это может помочь вам ..

0 голосов
/ 08 мая 2019

Ваш помощник не помогает. Если вы хотите высушить форму, извлеките ее в частичное (т.е. _form.html.erb) и задайте путь с помощью locals:

_form.html.erb

<%= form_tag path, method: :get, :html => {class: "form"} do |form| %>
  <%= text_field_tag :term, params[:term],
                     placeholder: "What are you looking for?",
                     class: "search_field" %>
  <%= submit_tag 'Search', name: nil, class: "search_bar_button" %>
<% end %>

Затем сделайте это в своем виде:

<% if params[:proposed_projects].present? %>
  <%= render 'form', path: proposed_projects_path %>
<% end %>
# add code for completed and in-progress

Как только он заработает, вы можете написать помощника для if s:

module ProjectsHelper
  def form_for_proposed_if(condition)
    # render form if condition
  end
end

вид

<%= form_for_proposed_if params[:proposed_projects].present?

В итоге у вас будет три помощника, которые также могут быть DRY'd.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...