当我启动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
答案 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