2

私は、ユーザーが投稿できるレールアプリを開発しています。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

models/seen.rb

belongs_to :user
belongs_to :post

モデル/user.rb

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

models/post.rb

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

そして、そのようなメソッドを作成できます

models/post.rb

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

controllers/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 に答える