ajax喜欢/不像在铁路4中的帖子

时间:2015-02-15 21:02:46

标签: ruby-on-rails ruby ajax ruby-on-rails-4

我一直在努力实现与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

我已经被困了好几个小时试图解决这个问题,任何帮助都很棒,如果你需要任何其他信息,请告诉我,谢谢。

0 个答案:

没有答案