A"用户"有很多"帖子"。我想在"用户"中创建一个counter_cache。这表明他们有多少帖子。
这很容易做到 - 但我只希望将帖子计入counter_cache,如果它们是公开的(即post.is_public === true
)。
如何在users表中创建一个包含公共帖子总数的列?
class User < ActiveRecord::Base
// Columns: id:integer name:string
has_many :posts
end
class Post < ActiveRecord::Base
// Columns: id:integer user_id:integer is_public:boolean content:text
belongs_to :user, dependent :destroy, counter_cache: true
end
答案 0 :(得分:0)
如果要使用update更新该counter_cache,可以使用ActiveRecord回调:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html。然后你可以在回调声明中使用条件:
before_save :counter_cache, if: proc { |r| r.public }
或者你可以在counter_cache方法本身内有条件,如果它知道记录。否则你可以使用上面的行。
此外,使用post.is_public
比使用if a > 3 === true
更加惯用(和干净),而不是将它与严格比较,就像你没有说`setcookie("user", $username, time() + 3600, '/');`
答案 1 :(得分:0)
首先,您需要在用户模型中建立关联并发布模型
class User < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :user
end
使用以下命令
将列名作为counter_cache rail g migration add_counter_cache_to_users post:references
现在用户ID在post表中,您可以获取控制器中用户的帖子数量 首先检查公开信息
if post.is_public === true
User_Record = User.first
id= User_record.id
user_Post=Post.where(:user_id=>id)
end
您将根据用户ID
获取用户的信息