我一直在努力实现与ajax一起使用的like / different功能。我已经构建并测试了似乎工作正常的模型和关联。我遇到的问题是在视图中渲染实际的like /不同按钮。我一直在使用这个https://github.com/Aufree/ting/tree/master/app/controllers github项目,比如/不像系统作为参考来构建我自己的。
继承我的控制器likeships_controller.rb
before_action :authenticate_user!
include LikeshipsHelper
def create
current_user.like!(params[:likeable_type], params[:likeable_id])
respond_to do |format|
format.html { redirect_to correct_path }
format.js
end
end
def destroy
current_user.unlike!(params[:likeable_type], params[:likeable_id])
respond_to do |format|
format.html { redirect_to correct_path }
format.js
end
end
Heres my likeship_helper.rb
module LikeshipsHelper
def likeable_likes_tag like
@count = Likeship.where("likeable_type = ? and likeable_id = ?", like[:likeable_type], like[:likeable_id]).count
if @count > 0
likes_count = @count
else
likes_count = ''
end
if current_user && current_user.liking?(like)
link_title = "unlike"
link_path_method = "delete"
fa_icon = '<i class="red heart icon"></i>'
else
link_title = "like"
link_path_method = "post"
fa_icon = '<i class="red heart empty icon"></i>'
end
if current_user.blank?
"#{likes_count}#{fa_icon}".html_safe
else
link_to "#{likes_count}#{fa_icon}".html_safe,
likeships_path(like),
title: link_title,
class: "animated zoomIn",
method: link_path_method,
remote: true
end
end
def correct_path
if params[:likeable_type].to_s == "Post"
post_path(params[:likeable_id])
end
end
end
这些是我的观点
_like.html.erb
<i class="red heart icon">
<%= form_for(current_user.likeships.build) do |f| %>
<%= f.hidden_field :likeable_type, value: @likeable[:likeable_type] %>
<%= f.hidden_field :likeable_id, value: @likeable[:likeable_id] %>
<%= f.submit %>
<% end %>
</i>
_likes.html.erb
<% if user_signed_in? %>
<% if current_user.liking?(@likeable) %>
<%= render 'likeships/unlike' %>
<% else %>
<%= render 'likeships/like' %>
<% end %>
<% end %>
编辑:现在如果我在_post.html.erb视图中使用它,则不会抛出任何错误,但也不会出现类似/不同的按钮。
<div class="post_wrapper">
<div class="media_wrapper">
<span class="name"><%= link_to post.user.name, post.user, class: "name" %></span>
<p class="media"><%= post.body_html %></p>
<div class="date_and_like">
<span class="item" id="like-post-#{@post.id}" >
<% @likeable = Likeship.likeable(@post) %>
<%= likeable_likes_tag @likeable %>
</span>
<span class="timestamp"><%= time_ago_in_words(post.created_at) %> ago </span>
</div>
</div>
继承了create.js.erb文件
$("#like-post-<%= params[:likeable_id] %>").html("<%= j(likeable_likes_tag @likeable) %>")
所以我也尝试使用此
在后视图中呈现喜欢的表单但它给了我一个错误
未定义的方法`[]&#39;为零:NilClass
我已经被困了好几个小时试图解决这个问题,任何帮助都很棒,如果你需要任何其他信息,请告诉我,谢谢。