需要使用rails将post_id和user_id存储在read_statuses表中

时间:2018-08-17 10:42:25

标签: ruby-on-rails ruby-on-rails-3

当我启动show动作时,控制器希望将post_id和user_id存储到另一个表中。但是它只需要存储第一次出现的信息即可。 (如果用户1首次打开帖子1,则会在数据库中创建一个条目,但第二次查看同一帖子时不会创建) 后控制器显示阳离子为:

def show
  @post = @topic.posts.find(params[:id])
  @read_status= ReadStatus.create(user_id: current_user,post_id: @post.id)
end

发布模型:

class Post < ApplicationRecord
  belongs_to :user
  has_many :read_statuses
  has_many :users,through: :read_statuses
end

用户模型:

class User < ApplicationRecord
  has_many :posts
  has_many :read_statuses
  has_many :posts, through: :read_statuses
end

读取状态模型:

class ReadStatus < ApplicationRecord
  belongs_to :user
  belongs_to :post
end

1 个答案:

答案 0 :(得分:1)

在模型mark_read_by_user中添加实例方法Post,并在其内部,仅在不存在关联记录的情况下,使用first_or_create创建关联记录。

class Post < ApplicationRecord
  def mark_read_by_user(user)
    self.read_statuses.where(post_id: id, user_id: user.id).first_or_create
  end
end

在控制器中:

def show
  @post = @topic.posts.find(params[:id])
  @read_status = @post.mark_read_by_user(current_user)
end