【发布时间】:2013-06-19 17:21:12
【问题描述】:
我有两个模型,用户和材料。用户可以喜欢的材料。我已经建立了关系并且收藏代码工作正常,但我似乎无法正确获取取消收藏的代码。我有以下不喜欢的代码:
材料控制员(在不喜欢的形式出现的情况下显示动作)
@favourite = Favmat.where(:user_id => current_user.id, :material_id => @material.id)
注意:我使用此代码来决定在视图中显示哪个按钮。假设存在记录,我们得到:
查看
<%= form_for @favourite, :method => :delete do |f| %>
<%= f.submit "Unfavourite" %>
<% end %>
问题似乎在这里。我所做的任何事情似乎都没有让我找到在 favmats 控制器中进行销毁操作的有效途径。我尝试使用 form_tag 代替,但后来我得到了非常奇怪的路线,这些路线不起作用。
Favmats 控制器
def destroy
Favmat.find(params[:id]).destroy
respond_to do |format|
format.html { redirect_to @material }
format.js
end
end
更新
我也尝试过使用 link_to 而不是表单。代码如下:
<%= link_to "Unfavourite", favmat_path, method: "delete" %>
奇怪的是,用于此的 html 从材料中获取 favmat id,而不是 favmat 对象。我不知道如何在其中获取 favmat 对象 ID。似乎没有任何效果。
【问题讨论】:
-
您是否收到错误消息?如果我站在你的立场上,我会在
materials_controller中处理“不喜欢”作为会员操作。 -
我确实收到了错误,是的。我曾考虑在材料控制器中处理不受欢迎的问题,但它已经很胖了,在 Favmats 控制器中与 Favmats 模型相关的操作似乎更有意义。
-
您遇到什么错误?你能粘贴所有的回溯吗?是不是
undefined method model_name...?
标签: ruby-on-rails ruby-on-rails-3.2 form-for destroy delete-record