我有,我想象的是一个关于调用自定义控制器方法并将数据传递给它们的一个非常简单的问题。
我已经向控制器添加了一个自定义方法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
传递给此自定义方法?
非常感谢任何指导;这个问题一直在扼杀我。
答案 0 :(得分:2)
您可以在remote
,link_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
查看文档通常是一个很好的指导: