【问题标题】:How to update if statement in views through AJAX in Rails app如何在 Rails 应用程序中通过 AJAX 更新视图中的 if 语句
【发布时间】:2016-11-28 02:45:35
【问题描述】:

在我的应用程序中,我有可投票的帖子,您可以在其中通过 AJAX 投票,这工作正常,但我也想在通过 AJAX 投票时更新帖子的状态(是否是商定的里程碑)。状态部分:

_milestone.html.erb

 <% if post.agreed? %> Agreed Milestone <% elsif post.milestone? %> 
 Proposed Milestone <% end %>

posts_controller.rb

def upvote
  @post = Post.find(params[:post_id])
  respond_to do |format|
    format.html { redirect_to @post }
    format.js
    @post.upvote_by current_user
  end
  if @post.votes_for.up.size == count_users
      @post.toggle! :agreed
  end
end

upvote.js.erb

$('#voting-<%= @post.id %>').hide();
$('#agreed-<%= @post.id %>').html("<%= j render(partial: 'posts/agreed',
locals: {post: @post}) %>");
$('#milestone-<%= @post.id %>').html("<%= j render(partial: 'posts/milestone',
locals: {post: @post}) %>");

同意的部分是选民名单。

因此,当帖子达到一定数量的投票时,它会将其布尔值更改为 true。然后我想更新视图中的状态。我尝试将里程碑元素呈现为部分和其他几种方法,但 if 语句从未执行并且状态不会更新。

【问题讨论】:

  • 您应该将 upvote.js.erb 添加到您的问题中,以便我们更清楚地了解您如何更新视图。

标签: jquery ruby-on-rails ajax


【解决方案1】:

您可能需要在渲染视图之前对其进行更新,

def upvote
  @post = Post.find(params[:post_id])
  @post.upvote_by current_user
  if @post.votes_for.up.size == count_users
      @post.toggle! :agreed
  end
  respond_to do |format|
    format.html { redirect_to @post }
    format.js
  end
end

希望有帮助!

【讨论】:

  • 非常有用。谢谢你。我按照您的建议将里程碑导出为部分和修改的控制器。我在 upvote.js,erb 中添加了最后一行。
猜你喜欢
  • 1970-01-01
  • 2013-06-23
  • 2015-05-09
  • 2020-04-16
  • 1970-01-01
  • 2021-03-28
  • 2015-09-27
  • 1970-01-01
  • 2021-08-03
相关资源
最近更新 更多