我有一个功能,用户喜欢/不喜欢和不喜欢/不喜欢的菜肴。这就是我最初设置动作的方式:
菜肴控制器
class DishesController < ApplicationController
def like
@dish.liked_by current_user
end
def dislike
@dish.disliked_by current_user
end
...
end
考虑到每个模板的js.erb
模板完全相同,我想创建一个可以使用的共享部分:
原始设置
# like.js.erb, unlike.js.erb,dislike.js.erb,undislike.js.erb
$(".restaurant__dish-vote--<%= @dish.modifier_class %>").html('<%= escape_javascript(render "restaurants/menu_partials/dish_votes", dish: @dish) %>');
新设置
# shared/_vote.js.erb
$(".restaurant__dish-vote--<%= @dish.modifier_class %>").html('<%= escape_javascript(render "restaurants/menu_partials/dish_votes", dish: @dish) %>');
现在我正在尝试重构我的控制器以反映这些更改,但ajax功能似乎不适用于以下内容:
class DishesController < ApplicationController
def like
respond_to do |format|
format.js { render partial: "dishes/shared/vote.js.erb" }
end
@dish.liked_by current_user
end
end
操作完成,但面向用户的更改仅在刷新时反映出来。我做错了什么?
答案 0 :(得分:1)
我认为您应该在@dish.liked_by current_user
之前致电render partial: "dishes/shared/vote.js.erb"
。问题是@dish
尚未更新。