【问题标题】:How to specify different action for link_to helper?如何为 link_to 助手指定不同的操作?
【发布时间】: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' =&gt; '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


【解决方案1】:

查看the link_to documentation - 我将描述您想要什么。

我没有测试过这个,但我猜你想要:

<%= link_to "delete", controller: 'favourites', action: 'delete_from_index_list', id: @favourite, remote: true %>

如果是我的代码,我会找到 delete_from_index_list 方法的路由,并这样调用它:

<%= link_to "delete", route_for_delete_from_index_list_path(@favourite), method: :delete %>

这种方式更有资源,而前一个例子是非资源的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 2018-11-15
    • 1970-01-01
    • 2020-09-17
    相关资源
    最近更新 更多