Rails,可与不同控制器配合使用的表单

Rails, form that can work with different controllers

我想制作搜索栏的 erb 模板,它将调用其控制器的 search 方法。不同的控制器有相同的方法,但会有不同的逻辑。是否可以通过在每个控制器的视图上渲染来制作适用于每个控制器的表单?

---更新--- 我找到了那种解决方案:

<%= form_tag "#{controller_name}/search", method: 'get' do  %>
    <div class="input-group">
        <%= text_field_tag :sub_string, '', class: 'form-control', placeholder: "Search..." %>
    <span class="input-group-btn">
        <%= submit_tag 'Search', class: %w(btn btn-primary) %>
    </span>
    </div>

<% end %>

然而,当我点击提交按钮时,它会转到我当前控制器的 search 操作,并抛出一个错误: Couldn't find Basis with 'id'=search

它尝试调用 set_basis 私有方法,即使它没有被 before_action?

调用

使用参数[:controller]设置搜索表单的控制器名称。

使用 Rails Guide 查看如何为 form_tag 或 form_for 传递控制器和操作。

我觉得你可以 在 views/shared 文件夹下创建 template/partial 然后在控制器中做类似

的事情
def search 
  render :partial => "shared/search"
end

好的 然后添加这个 在你的部分,这样你就可以动态地改变你的控制器的形式

form_tag({controller: controller.controller_name, action: "search_action"}, method: "post", class: "form")