我知道这有很多线程,但是我似乎无法弄清楚这里发生了什么。我有一个调用类似方法的远程链接。
当我点击喜欢的链接...
发生了什么事
like
已创建(按预期)。应如何处理:
like.js.erb
中的内容更改。我已将console.log添加到此文件,并且在单击“喜欢”链接时不会显示该文件。_like.html.erb
<% recipe = recipe || @recipe %>
<%= link_to unlike_recipe_path(recipe), remote: true, class: "recipe-card__like like" do %>
<i class="heart icon"></i>
<% end %>
注意:局部页面既显示页面又显示索引,这就是为什么我使用||的原因。声明。
like.js.erb
$('.like').bind('ajax:success', function(){
console.log('like clicked');
$(this).closest('.like').hide();
$(this).closest('.like-container').html('<%= escape_javascript (render partial: 'unlike', recipe: @recipe ) %>');
});
routes.rb
resources :recipes do
resources :likes
member do
get "/like", to: "recipes#like"
end
end
recipes_controller.rb
def like
@recipe = Recipe.find(params[:id])
@like = @recipe.likes.create(recipe_id: @recipe.id, user_id: current_user["uid"])
respond_to do |format|
format.html
format.js
end
end
application.js
//= require jquery
//= require jquery_ujs
//= require rails-ujs
//= require turbolinks
//= require semantic-ui/sidebar
//= require_tree .
答案 0 :(得分:0)
您可以使用JS / Html / Ajax通过多种方式进行操作。
#like.js.erb
#if wanna validate the request success or fail use @like
# just make sure @like is not string type otherwise it will always success in JS file.
if("<%= @like %>"){
console.log('like clicked');
$(this).closest('.like').hide();
$(this).closest('.like-container').html('<%= escape_javascript (render partial: 'unlike', recipe: @recipe ) %>');
}
此外,在控制器中无需recipe_id: @recipe.id
。应该会自动分配。
@like = @recipe.likes.create(user_id: current_user["uid"])
答案 1 :(得分:0)
就像我在评论中说的那样,您.bind('ajax:succeed')
的那一刻已经很晚了,因为此文件确实是结果。您的erb
文件将在呈现输出之前填充,因此您可以
<% if @result == "success" %>
console.log('like clicked')
$(this).closest('.like').hide();
$(this).closest('.like-container').html('<%= escape_javascript (render partial: 'unlike', recipe: @recipe ) %>');
<% else %>
console.log('something went wrong, this person has to many likes')
<% end %>
其中@result
是您的控制器变量
答案 2 :(得分:0)
我的链接正在调用unlike
方法而不是like
方法。简单的错字。
原始
<% recipe = recipe || @recipe %>
<%= link_to unlike_recipe_path(recipe), remote: true, class: "recipe-card__like like" do %>
<i class="heart icon"></i>
<% end %>
应该是什么
<% recipe = recipe || @recipe %>
<%= link_to like_recipe_path(recipe), remote: true, class: "recipe-card__like like" do %>
<i class="heart icon"></i>
<% end %>