我是ruby on rails的新手,我构建了一个带有复选框的列表。我在这里询问如何使用params获取已检查的值,并让它工作。现在的想法是,如果我单击某个按钮,则对所选项执行某些操作,如果我单击另一个按钮,则执行另一个操作,但在回发后始终保持在同一页面。
现在发生的事情是,我正在采取行动,但同时也是另一个网址。例如:
我的观点中有以下表格:
form_tag delete_profiles_path, :method => :put do
submit_tag 'Delete'
@my_announcements.each do |ann|
check_box_tag 'announcement[]', ann.id
end
end
我的个人资料控制器:
def delete
#some action
end
和routes.rb:
map.resources :profiles, :collection => {:delete => :put}
这将在提交至:
后重定向我/ profiles / complete,我的表格是 / profiles / some id / my-announcements
另外,如果我添加另一个按钮(例如删除按钮),如何在点击它们时处理多个动作但保持同一个网址会怎么样?
答案 0 :(得分:0)
首先,为什么要用PUT删除而不是DELETE HTTP方法?您应该使用默认方法进行删除:使用:method => :delete
并在控制器#destroy
操作中(您也可以使用delete
,但它就像新的一样,用于显示您想要执行的操作,并{{1就像destroy
)。
第二 - 用于提交表单的按钮名称在update
中发送,因此您可以区分用于提交表单的按钮。
Thirt - 你不能在Rails中“保持同一页面”(或者它可以,但是对抗Rails)。它应该是这样的:
在控制器中提交表单到操作,大部分时间它的url与'/ profiles /'或'/ profiles / id'相同,并且操作是区分bu方法(POST,PUT或DELETE)
区分您要执行的操作并尝试完成操作。如果不可能(例如验证错误),则只需显示具有实际值的相同表单,并显示无法完成的错误。如果用户刷新页面并再次提交params,他应该获得相同的页面和相同的错误,并且该操作也不应该完成。
如果此控制器完成请求,请重定向到其他页面。它的工作方式是这样的,因为如果用户刷新页面,那么(如果它被重定向)没有任何反应,他会回到新的页面。如果你不重定向用户会做第二次同样的动作,这并不总是你想要的。这个新页面可以是当然提交表单的页面
答案 1 :(得分:0)
那么,
我可以使用ajax部分解决这个问题,如下所示:
remote_form_for :profile, :url => {:controller => 'announcements', :action => 'deactivate'}, :html => { :method => :put} do |f|
f.submit 'Publish', :confirm => 'Are you sure?'
这很有效。我现在要做的是添加另一个“提交”或按钮,这样我就可以执行多个操作,所以我想remote_form_for上的:url语句将被替换为每个按钮的类似内容。例如:
发布按钮:在某个控制器中执行某些操作。 取消激活按钮:执行另一个按钮。
是否清楚?