既然我已经将它升级到 Rails 3.1,我仍在努力清理我的 Rails 应用程序中的失败测试。
我的应用程序中有一个消息传递功能,允许客户和提供者就他们的项目相互交换私人消息。
在他们的收件箱中,用户会看到一个消息列表和每个消息旁边的复选框。如果他们选中复选框,我有一些 js/ajax 内联标记要删除的消息并“放置”一个messages#add_remove_message/id
操作:
<%= check_box_tag('id', 'id', false, :onclick => remote_function( :url => { :action => :add_remove_message, :id => message.id, :method => :put } )) %>
当然,remote_function 在 Rails 3.1 中消失了,我应该用某种不显眼的 javascript 方法替换这段代码。大多数教程都解释说 using:remote => true
是摆脱 remote_function 的一般方法,也许还有一些data-href
调用。但这似乎不适用于 check_box_tag。
在这里进行的最佳方式是什么?我只想要一种 ajax-y 方式来让用户轻松归档收件箱消息而无需重新加载页面。如果我可以保留现有的 add_remove_message 方法,那就太好了,但如果它能带来更好的整体解决方案,我会很乐意放弃它,转而使用其他方法。
当前的 add_remove_message 方法如下所示:
def add_remove_message
add_remove_ids = Array.new
unless cookies[:add_remove].empty?
add_remove_ids = cookies[:add_remove].split('|')
end
if add_remove_ids.include? params[:id]
add_remove_ids.delete params[:id]
else
add_remove_ids << params[:id]
end
cookies[:add_remove] = add_remove_ids*'|'
render :nothing => true
end
这是以前从事此消息传递模块的自由开发人员的遗留代码。我不喜欢它(尽管它的优点是我大多了解它的作用!)
我将不胜感激有关如何进行的建议,无论是涉及语法的简单更改、一些 jQuery 插件还是对整个消息删除 UI 的彻底检修。