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

时间:2015-01-23 01:38:04

标签: ruby-on-rails ruby-on-rails-4 routes

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

我已经向控制器添加了一个自定义方法dprocess,以便对我在post objects中列出的index采取行动,并通过某种按钮进行调用。方法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传递给此自定义方法?

非常感谢任何指导;这个问题一直在扼杀我。

1 个答案:

答案 0 :(得分:2)

您可以在remotelink_to方法上使用特殊属性button_to来表示您要执行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

所以网址看起来像/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 %>

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

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