【问题标题】:Common form tag in form helper表单助手中的常用表单标签
【发布时间】:2019-09-26 06:31:05
【问题描述】:

我有一个搜索栏表单,它根据名称搜索项目。项目按已完成的项目进行中的项目建议的项目来区分。这三个具有相同的形式期望路径名。所以,我决定在 helper 中使用一个通用的形式。

已完成提案进行中项目在项目控制器中使用不同的操作。我试过用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_projectscomposed_projectsprojects。如果我在form.html.erb? 中做正确的方式?

如果有其他可用的解决方案?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    你的助手帮不上忙。如果您想 DRY 表单,请将其提取为部分(即 _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
    

    一旦它工作了,你就可以为ifs 写一个助手:

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

    查看

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

    你最终会得到三个可以被 DRY 的助手。

    【讨论】:

      【解决方案2】:
      <%= 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 %>
      

      像这样区分每个动作......这可能对你有帮助......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多