【问题标题】:Rails performing actions (vote) on post's index pageRails 在帖子的索引页面上执行操作(投票)
【发布时间】:2013-12-27 23:41:19
【问题描述】:

我的 rails 应用程序有设计(帖子),其中有 cmets,这些 cmets 可以被喜欢(投票)。

为了在设计展示页面上显示这些 cmets,我的 DesignsController 如下所示:

def show
  @comments = @design.comments
end

现在,在视图中,我有一个 each 块来列出每个 cmets,但这已被放入 ajax 的部分中。

每个块的部分看起来像这样(我会简化)

<% @design.comments.each do |comment| %>
   <%= comment.body %>
   <p class="comment_vote">
     <%= render("comments/like_button") %>
   </p>
<% end %>

这里是like_button部分:

<% if current_user.voted_on?(@comment) %>
  <%= link_to polymorphic_path([@targetable, @comment.design, @comment], action: :unlike), :method => :post, :class => ("liked" if current_user.voted_on?(@comment)), :remote => true do %>
    Unlike
  <% end %>
<% else %>
  <%= link_to polymorphic_path([@targetable, @comment.design, @comment], action: :like), :method => :post, :remote => true do %>
    Like
  <% end %>
<% end %>

如您所见,点赞按钮也在另一个部分中,这需要我使用全局变量(@comment,而不是评论)。

没有 ajax,我可以让用户喜欢每个单独的评论,它只是刷新页面,因为用户喜欢“局部变量”comment。现在我正在使用 ajax,在我的 like.js.coffee 文件中,我必须使用一个全局变量 @comment,它还没有在我的控制器中定义。所以发生的事情是 ajax 工作正常,每条评论都被喜欢,而不仅仅是用户喜欢的特定评论。任何人都可以阐明这个问题并帮助我解决它吗?我宁愿使用 ajax 然后页面刷新。

谢谢,一如既往

编辑 @muistooshort 的答案仍然是同时喜欢所有的 cmets

【问题讨论】:

  • 您的like_button 部分中有什么内容?可以发一下内容吗?
  • 我编辑了我的帖子以包含like_button

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


【解决方案1】:

我会通过:locals发送评论:

<%= render :partial => 'comments/like_button', :locals => { :comment => comment } %>

那你可以在你的部分参考comment

您还必须对 @targetable 做一些事情,但我不知道那是什么或它应该来自哪里(这是 IMO 使用 targetable 而不是 @987654326 的充分理由@)。

【讨论】:

  • 你不能简单地写吗?渲染“cmets/like_button”,评论:评论
  • @TheRusskiy:也许吧,但我更喜欢明确一点,这样我就不必费力地查看正在发生的事情或担心选项和我的变量名之间的冲突。越短不一定越好。
  • 有点与你的昵称产生共鸣 :-)
  • @muistooshort,请检查我的编辑,因为我仍然收到错误消息。
  • 你不想在你的.js.coffee 中加入$(".comment_vote").html("&lt;%= ... comment: @comment %&gt;"); 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多