调用对象并将其传递给控制器​​中的自定义方法

Calling and passing objects to a custom method in the controller

我有,我必须想象的是一个关于调用自定义控制器方法并将数据传递给它们的非常简单的问题。

我已经向控制器添加了一个自定义方法 dprocess,目的是作用于我在 index 中列出的 post objects,以某种方式调用按钮。方法 dprocess 没有任何视图,只是简单地处理 post 中的数据并将结果保存到 /tmp/ 中的文件中。我遇到的问题是我不知道如何将数据传递给这个自定义方法。

这是我的 index.html.erb

<% @post.each do |post| %>
    <tr>
      <td class="Name"><%= link_to post.name, post %></td>
      <td class="created_at"><%= link_to "Edit Post", edit_post_path(post) %></td>
      <td class="generate"><%= button_to "Process Post", ........ %></td>
    </tr>
<% end %>

注意button_to中的“.......”;缺少的内容是我正在努力弄清楚的内容。

我的问题是:如何将post传递给控制器​​中的这个自定义方法?

非常感谢您的指导;这个问题一直困扰着我。

您可以在 link_tobutton_to 方法上使用特殊属性 remote 来指示您要执行 AJAX 操作。

假设您的路线如下:

resources :posts do
  member do
    # note: the post here means a HTTP POST request is necessary, if you want 
    # a HTTP GET request, change it to get
    post 'dprocess'
  end
end

所以 url 看起来像 /posts/:id/dprocess

然后你可以在点击这样的按钮时执行AJAX请求,请 确保根据您配置路由的方式将 method 属性更改为 :post:get

<% @post.each do |post| %>
    <tr>
      <td class="Name"><%= link_to post.name, post %></td>
      <td class="created_at"><%= link_to "Edit Post", edit_post_path(post) %></td>
      <td class="generate"><%= button_to "Process Post", dprocess_post_path(post), :remote => true, :method => :post %></td>
    </tr>
<% end %>

这将调用您的控制器操作 dprocess 使用 POST 请求:

def dprocess 
  # find object
  @post = Post.find(params[:id])

  # ... perform processing

  # render nothing
  render :nothing => true
end

查看文档通常是一个很好的指导:

button_to documentation, see "Options" sections

Rails Guide on AJAX helpers