【问题标题】:Fire up custom action when user clicks 'Search" on RAILS 3.2 form?当用户在 RAILS 3.2 表单上单击“搜索”时启动自定义操作?
【发布时间】:2014-07-06 21:37:12
【问题描述】:

当用户点击搜索表单上的“搜索”按钮时,是否可以启动自定义操作?

我们的应用中有一种机制可以保存应用点击的每个 URL。在我们的搜索表单中,当点击“搜索”按钮时,会弹出搜索结果页面。问题是搜索结果表单的 URL 未保存。 Back 按钮带回搜索页面(用于设置搜索参数)而不是搜索结果页面(因为其 URL 未保存)。

这是型号configs的搜索表:

  <h4>Search Form></h4>
  <%= simple_form_for @config, :method => :get, :url => search_result_configs_path  do |f| %>
      <%=render  :partial => 'search_params', :locals => {f: f} %>

      <%= f.button :submit, t('Search') %>
  <% end %>

用户点击Search按钮后,搜索结果的URL如下(搜索参数由用户设置):

http://localhost:3000/configs/search_results?utf8=%E2%9C%93&engine_config[start_date_s]=&engine_config[end_date_s]=&engine_config[engine_id_s]=1&engine_config[argument_name_s]=&engine_config[commissioned_s]=&commit=%E6%90%9C%E7%B4%A2

这是我们希望应用记住的 URL。我们认为我们需要在用户单击'Search' 按钮时触发自定义操作。可能吗?

【问题讨论】:

  • 我们可能可以在用户点击搜索按钮后在控制器中的 action serach_results 中插入自定义操作。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

路线

首先,调用自定义应用程序实际上是一个非常简单的过程——你只需要调用它的路由:

#config/routes.rb
resources :search do
    collection do
        get :custom_action
    end
end

这将允许您使用form_tag 之类的方法来调用自定义路由:

#app/views/your_controller/view.html.erb
<%= form_tag search_custom_action_path, method: :get do %>
    ...
<% end %>

--

表格

其次,您在搜索表单中使用simple_form

这完全没问题,但是您遇到的问题是,当您使用它时,它必须有一个ActiveRecord 对象来填充表单。这可能是您感到困惑的地方,为此,您需要确保每次加载该表单时@config 都可用,我想这可能很多。

我们创建了一个search 表单here

尽管在 Rails 4 中,我们为此表单使用了form_tag,因为它允许我们在应用程序中的任何需要的位置创建和显示表单。这允许我们通过表单传递所需的参数并在另一端访问它们

--

参数

您提到要“保存 URL”- 这是什么意思?

您确定要保存params

如果这是真的,那么执行此操作的方法实际上相对简单 - 当您通过以下方式发送请求时,您将可以访问控制器中的 params 哈希:

#app/controllers/your_controller.rb
Class YourController < ApplicationController
  def custom_action
     params[:your_param] #-> this is accessible here
  end
end

最重要的是,如果您想保存查询字符串,您必须创建一个名为 Search 或类似名称的模型,允许您在处理控制器中的自定义操作时传递参数,就像你会使用任何其他 ActiveRecord 对象

【讨论】:

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