基本上我想创建一个能够从“收藏”动态刷新到“删除”的链接,同时通过重新点击新按钮让用户可以选择返回。但是,操作确实发生了,因为当我刷新页面时,更新的按钮会显示。为什么单击“收藏此课堂”链接不起作用? “删除此课堂”链接似乎有效。谢谢你的帮助
favorites_controller.rb:
def create
current_classroom.add_to_favorites(@classroom)
current_classroom.save
respond_to do |format|
format.js { }
format.html {redirect_to @classroom}
end
end
def destroy
current_classroom.remove_from_favorites(@classroom)
current_classroom.save
respond_to do |format|
format.js { }
format.html {redirect_to @classroom}
end
end
收藏夹/ create.js.erb
$("#favorite_classroom").html("<%= escape_javascript(link_to 'Remove the Classroom', classroom_favorite_path(@classroom), :remote => true, :method => :delete) %>");
教室/ _classroom_details.html.erb
<div id="favorite_classroom">
<% if loggedin_user.favorite_classroom?(@classroom) %>
<%= link_to 'Remove this Classroom', classroom_favorite_path(@classroom), :remote => true, :method => :delete %>
<% else %>
<%= link_to 'Favorite this Classroom', classroom_favorites_path(@classroom), :remote => true, :method => :post %>
<% end %>
路线:
classroom_favorites POST /classrooms/:classroom_id/favorites(.:format) {:action=>"create", :controller=>"favorites"}
classroom_favorite DELETE /classrooms/:classroom_id/favorites/:id(.:format) {:action=>"destroy", :controller=>"favorites"}
点击“收藏此课堂”链接时出错:
ActionView::Template::Error (No route matches {:action=>"destroy", :controller=>"favorites"
谢谢!
答案 0 :(得分:1)
您在js文件中使用双引号两次。你不能这样做。你需要像这样重写它 -
$("#favorite_classroom").html("<%= escape_javascript(link_to 'Remove the Classroom', classroom_favorite_path(@classroom), :remote => true, :method => :delete) %>");
现在注意,删除课堂用单引号括起来,而不是加倍。
此外,您的路线不正确,因为您在教室内嵌套了收藏夹。编写链接时,需要添加要删除的@favorite对象:
= link_to 'Remove Favorite', classroom_favorite_path([@classroom, @favorite]), :remote => true, :method => :delete
现在您尝试访问的路线有效。那应该摆脱错误。
答案 1 :(得分:0)
我认为你不需要最喜欢的控制器,你需要的是对教室控制器最喜欢/不喜欢的动作。这是它看起来的样子
<强> classroom_controller.rb 强>
respond_to :html, :js
def favorite
# ... find classroom by id
# do your stuff
@classroom.favorite = !@classroom.favorite
respond_with(@classroom)
end
<强>视图/教室/ favorite.js.erb 强>
<%# the message should be oposite to favorite %>
<% msg = @classroom.favorite ? "Remove this Classroom" : "Favorite this Classroom" %>
$("#favorite_classroom").html("<%= escape_javascript(link_to msg, [:favorite, @classroom], :remote => true) %>");
以下是路径助手的技巧,[:favorite, @classroom]
应该被转换为/classrooms/:id/favorite
。如果它不起作用,请尝试favorite_classrooms_path(@classroom)
最后添加到 routes.rb
resource :classrooms do
member { get :favorite }
end
答案 2 :(得分:0)
您似乎需要在链接中引用“favorite_id”以匹配您的路线。
在你的情况下,可能是:
classroom_favorite_path([current_classroom, @classroom])