2

我正在开发一个 Rails 应用程序,用户可以在其中发布,必须喜欢 facebook。我想实现一个通知系统,提醒用户注意新帖子。但是,我在如何判断用户是否查看过帖子时遇到了麻烦。我真的一无所知。

我正在使用 devise gem,它可以让我访问某些用户统计信息(如果有帮助的话):

  create_table "users", :force => true do |t|
    t.string   "email",                  :default => "", :null => false
    t.string   "encrypted_password",     :default => "", :null => false
    t.string   "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.integer  "sign_in_count",          :default => 0
    t.datetime "current_sign_in_at"
    t.datetime "last_sign_in_at"
    t.string   "current_sign_in_ip"
    t.string   "last_sign_in_ip"
    t.string   "confirmation_token"
    t.datetime "confirmed_at"
    t.datetime "confirmation_sent_at"
    t.string   "unconfirmed_email"
    t.integer  "failed_attempts",        :default => 0
    t.string   "unlock_token"
    t.datetime "locked_at"
    t.string   "authentication_token"
    t.datetime "created_at",                             :null => false
    t.datetime "updated_at",                             :null => false
    t.string   "username",               :default => "", :null => false
    t.integer  "admin",                  :default => 0
  end

还有我的帖子模型:

  create_table "posts", :force => true do |t|
    t.integer  "user_id"
    t.text     "content"
    t.datetime "created_at",                :null => false
    t.datetime "updated_at",                :null => false
  end

如何实现一个知道用户是否看过帖子的系统?

4

1 回答 1

3

简单的方法是这样的:

创建一个名为Seen的模型

rails g model Seen post:references user:references

模型/seen.rb

belongs_to :user
belongs_to :post

模型/用户.rb

has_many :seens
has_many :seen_posts, through: :seens, source: :post

模型/post.rb

has_many :seens
has_many :seen_users, through: :seens, source: :user

你可以创建一个类似的方法

模型/post.rb

def seen_by?(user)
  seen_user_ids.include?(user.id)
end

控制器/posts_controller.rb

def show
  @post = Post.find(params[:id])
  current_user.seen_posts << @post unless @post.seen_by?(current_user) 
end
于 2012-09-07T11:36:34.587 回答