【发布时间】:2013-12-24 17:50:48
【问题描述】:
我正在创建一个网站,用户可以在其中将项目标记和取消标记为“收藏”。
我通过 Ajax 使用 Rails 的表单属性 remote: true 实现了这一点,所以整个页面不会重新加载,只是项目的状态发生了变化。
我在FavouritesController有两个方法
def create
Favourite.create!(item_id: params[:favourite][:item_id])
respond_to { |format| format.js }
end
def destroy
Favourite.find(params[:id]).destroy!
respond_to { |format| format.js }
end
问题是:
我想从同一个控制器调用另一个动作来“取消标记”另一个视图中的项目。我使用下面的代码,但是当我单击链接时 - 从控制器调用旧方法 destroy,而不是所需的 delete_from_index_list 方法。
我需要两个单独的方法,因为它们返回不同的 javascript (jquery)。
<%= link_to "delete", @favourite, method: :delete, remote: true, action: 'delete_from_index_list' %>
【问题讨论】:
-
第二个参数应该是一个 URL 帮助程序,它会导致您在控制器中执行操作:模式是:
my_action_my_controller_path(extra_param: value),所以在您的情况下:link_to "Delete", delete_from_index_list_favourite_path(id: @favourite.id)(您可能需要将“最喜欢的” " 取决于您是否将 delete_from_index_list 定义为收藏资源的成员或集合路径)。 -
谢谢,Yoshiji 先生。这条路线在语义上是否正确?
match '/favourites/delete/:id' => 'favourites#delete_from_favourites_list', as: :delete_from_favourites_list_favourite, via: 'delete'或许我应该改用match '/favourites/:id/delete'?
标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4 link-to