使用 respond_to 方法渲染 js.erb 部分
Using the respond_to method to render a js.erb partial
我有一个功能,其中用户like/unlike和dislike/undislike菜。这就是我最初设置动作的方式:
菜品控制器
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
操作完成,但面向用户的更改仅在刷新时反映出来。我做错了什么?
我认为你应该在 render partial: "dishes/shared/vote.js.erb"
之前调用 @dish.liked_by current_user
。问题是 @dish
还没有更新。
我有一个功能,其中用户like/unlike和dislike/undislike菜。这就是我最初设置动作的方式:
菜品控制器
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
操作完成,但面向用户的更改仅在刷新时反映出来。我做错了什么?
我认为你应该在 render partial: "dishes/shared/vote.js.erb"
之前调用 @dish.liked_by current_user
。问题是 @dish
还没有更新。