【问题标题】:Rails, form that can work with different controllersRails,可以与不同控制器一起使用的形式
【发布时间】:2015-03-04 09:45:32
【问题描述】:

我想制作搜索栏的 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调用?

【问题讨论】:

    标签: ruby-on-rails ruby search model-view-controller form-for


    【解决方案1】:

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

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

    【讨论】:

    • 我看到的唯一方法是创建辅助方法,该方法将通过获取一些参数(用于设置)来构造我的表单并返回 html_safe 字符串。
    • 老兄,这有点糟糕。您可以将通用表单/html 放在 application.html.erb(layout) 文件中。您的表单将在您的所有应用程序视图中通用。
    【解决方案2】:

    我认为你可以 在视图/共享文件夹下创建模板/部分 然后在控制器中做类似的事情

    def search 
      render :partial => "shared/search"
    end
    

    好的 然后添加这个 在您的部分中,以便您可以动态更改表单的控制器

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

    【讨论】:

    • 我打算这样做,但我怎样才能让这个表单向searchthis控制器的操作发出请求?
    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多