Rails 4中的Ajax无法更新内容

雨武

我有控制器:“喜欢”,动作:“创建”

def create
 @micropost = Micropost.find(params[:micropost_id])
 current_user.like(@micropost)
 @micropost.reload

 @likes = @micropost.count_likes

 respond_to do |format|
   format.html { redirect_to root_path }
   format.js
 end
end

此操作将请求json并使用ajax更新视图,如果我这样写,该视图将正确呈现:

$("#like_count-<%= @micropost.id %>").html('<%= @likes %>');

但是写:

$("#like_count-<%= @micropost.id %>").html('<%= @micropost.count_likes %>');

不起作用。我还检查了@ micropost.reload之后,@ micropost.count_likes的值是否已更新。我不知道发生这种情况的原因。希望你们能有所帮助。这是Micropost的源代码:

class Micropost < ActiveRecord::Base
 # micropost belong to one user
 belongs_to :user

 # many user can like one micropost
 has_many :user_likes, class_name: "Like",
       foreign_key: "micropost_id",
       dependent: :destroy
 has_many :likers, through: :user_likes, source: :user

 default_scope -> { order(created_at: :desc) }
 mount_uploader :picture, PictureUploader

 validates(:content, presence: true, length: {:maximum => 200})
 validates(:user_id, presence: true)
 validate :picture_size

 def count_likes
   user_likes.length > 0 ? "(#{user_likes.length})" : ""
 end

 private
 # Validates the size of an uploaded picture.
 def picture_size
   if picture.size > 1.megabytes
     errors.add(:picture, "should be less than 1MB")
  end
 end
end

更新

向Likes#create的表单发布请求:

<%= form_for(micropost.user_likes.build, remote: true) do |f| %>
<div><%= hidden_field_tag :micropost_id, micropost.id %></div>
<%= f.submit "like", class: "btn btn-primary", style: "width: 100px" %>
<% end %>

用户类:

class User < ActiveRecord::Base
...
# user can like many microposts
has_many :pos_likes, class_name: "Like",
       foreign_key: "user_id",
       dependent: :destroy
has_many :fav_posts, through: :pos_likes, source: :micropost
...
# like a post
def like(micropost)
   self.pos_likes.create(user_id: self.id, micropost_id: micropost.id)
end
尼古拉·康德拉琴科(Nickolay Kondratenko)

这里的问题在于使用#length而不是#count方法。下面对它们之间的区别进行了很好的解释:

在复杂的ActiveRecord情况下,大小,长度和计数之间的差异

因此,要解决这个问题,你需要使用user_likes.count,而不是user_likes.length在你的Micropost#count_likes

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails 4中的Ajax请求更新值

来自分类Dev

rails 4 ajax编辑表单无法触发更新

来自分类Dev

引导选项卡中的Rails 4 ajax加载内容

来自分类Dev

引导选项卡中的Rails 4 ajax加载内容

来自分类Dev

在Rails中动态更新内容

来自分类Dev

Rails 4 Ajax更新div

来自分类Dev

jQuery和AJAX在Rails 4中无法正常工作

来自分类Dev

无法创建或更新Rails 4中的belongs_to记录

来自分类Dev

在Rails 4中更新模型

来自分类Dev

Rails 4 Ajax无法呈现新数据

来自分类Dev

弹性搜索+ Rails 4中的翻译内容

来自分类Dev

在Rails 4中截断TinyMCE内容

来自分类Dev

Ajax在Rails 4中重新加载div内容错误+放置远程位置:true

来自分类Dev

使用Ajax在Rails中更新表数据

来自分类Dev

如何使用Ajax更新Rails中的Button

来自分类Dev

使用Ajax更新ERB中的Rails变量

来自分类Dev

为什么在Rails 4上的ruby无法在head标签中重新加载任何内容

来自分类Dev

Rails 4在不保存的情况下更新对象内容

来自分类Dev

Rails 4 AJAX删除HAML中的链接

来自分类Dev

$ .get在AJAX Rails 4中未执行

来自分类Dev

嵌套表未在Rails 4中更新

来自分类Dev

用户索引页面上的Ajax中的按钮未更新-Rails教程4

来自分类Dev

为什么不在Rails 4中通过ajax请求更新WEB UI?

来自分类Dev

rails:rails的条件4

来自分类Dev

rails:rails的条件4

来自分类Dev

在Heroku中无法使用Rails 4的geocomplete

来自分类Dev

Rails 4:使用AJAX调用更新模型属性

来自分类Dev

Rails 4:来自Chrome扩展程序的Ajax请求更新表

来自分类Dev

在Rails中尝试Ajax