Ruby on rails 如何在管理员按submit时将表值设置为true
我在我的网站上有一个评论系统,我想在管理员的评论中添加一个管理员签名。并非所有的评论都是由用户留下的,因为任何访问该网站的人,即使是普通用户和管理员用户,都会使用论坛发表评论 如果用户表上的Ruby on rails 如何在管理员按submit时将表值设置为true,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在我的网站上有一个评论系统,我想在管理员的评论中添加一个管理员签名。并非所有的评论都是由用户留下的,因为任何访问该网站的人,即使是普通用户和管理员用户,都会使用论坛发表评论 如果用户表上的admin布尔值为true,则用户被视为管理员 Comment.rb class Comment < ApplicationRecord belongs_to :commentable, polymorphic: true has_many :comments, as: :commentable
admin
布尔值为true
,则用户被视为管理员
Comment.rb
class Comment < ApplicationRecord
belongs_to :commentable, polymorphic: true
has_many :comments, as: :commentable, dependent: :destroy
default_scope {order(created_at: :asc)}
attribute :nickname, :captcha => true
validates :body, presence: true, length: { minimum: 3, maximum: 300 }
validates :name, presence: true, length: { minimum: 2, maximum: 30 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :email, presence: true, length: { maximum: 100 },
format: { with: VALID_EMAIL_REGEX }
end
class CommentsController < ApplicationController
before_action :find_commentable
private
def comment_params
params.require(:comment).permit(:body, :email, :name, :admin_comment)
end
def find_commentable
@commentable = Comment.find_by_id(params[:comment_id]) if params[:comment_id]
@commentable = Post.friendly.find(params[:post_id]) if params[:post_id]
end
end
及
在用户模型中,我将的关系设置为:comments,as::commentable
我只是想知道管理员的评论是否属实
当管理员发表评论而不必使用
一个复选框
在注释模型中删除复选框并在创建之前设置,并检查注释的所有者是否为admin。例如:
app/models/comment.rb
class Comment < AR
belongs_to :user
before_create do
self.admin_comment = true if user.admin?
end
end
class注释
顺便说一句您的代码有漏洞,任何人都可以发送带有true
值的admin\u comment
参数
我只是想知道管理员的评论是否属实
当管理员发表评论而不必使用
一个复选框
在注释模型中删除复选框并在创建之前设置,并检查注释的所有者是否为admin。例如:
app/models/comment.rb
class Comment < AR
belongs_to :user
before_create do
self.admin_comment = true if user.admin?
end
end
class注释
BTW您的代码有漏洞,任何人都可以发送带有true
值的admin\u comment
参数。您的数据模型在我看来不完整,下面是您可能要做的:
- Commentable可以是用户可以对其进行评论的模型/实体的多态关系。所以,若用户可以在帖子上发表评论,那个么它可以有
许多:评论,如::commentable
。类似地,如果用户可以回复其他人的评论,那么评论模型也可以具有这种多态关系
- 如果您想跟踪哪个用户添加了注释,那么理想情况下,它需要是用户模型中的
has_many:comments
关系。您不能在这里使用多态性,因为这意味着您正在尝试对用户添加评论,而不是跟踪哪个用户在帖子上添加了特定评论或回复了任何评论
- 如果您不想跟踪哪个用户发布了评论,只想跟踪它是否是管理员,那么您可以将控制器中的代码修改为类似以下内容:
def comment_params
params.require(:comment).permit(:body, :email, :name).merge(admin_comment: current_user.admin)
end
我认为您的数据模型不完整,以下是您可能需要执行的操作:
- Commentable可以是用户可以对其进行评论的模型/实体的多态关系。所以,若用户可以在帖子上发表评论,那个么它可以有
许多:评论,如::commentable
。类似地,如果用户可以回复其他人的评论,那么评论模型也可以具有这种多态关系
- 如果您想跟踪哪个用户添加了注释,那么理想情况下,它需要是用户模型中的
has_many:comments
关系。您不能在这里使用多态性,因为这意味着您正在尝试对用户添加评论,而不是跟踪哪个用户在帖子上添加了特定评论或回复了任何评论
- 如果您不想跟踪哪个用户发布了评论,只想跟踪它是否是管理员,那么您可以将控制器中的代码修改为类似以下内容:
def comment_params
params.require(:comment).permit(:body, :email, :name).merge(admin_comment: current_user.admin)
end
哦,我网站上的评论实际上通常不属于:用户
任何人都可以在提供凭据后发表评论。相反,它属于:可评论的,多态的:true
我会用更多信息更新我的问题。没关系,你可以参考可评论的记录。我怎么做?我已经尝试将@commentable=User.friendly.find(params[:User\u id])如果params[:User\u id]
添加到find\u commentable
方法中,并在用户模型中放置有许多:注释,如::commentable
。我已经尝试了几种不同的方法来回答,但现在不允许我提交注释。你知道会发生什么吗?哦,我网站上的评论通常不属于:用户任何人都可以在提供凭据后发表评论。相反,它属于:可评论的,多态的:true
我会用更多信息更新我的问题。没关系,你可以参考可评论的记录。我怎么做?我已经尝试将@commentable=User.friendly.find(params[:User\u id])如果params[:User\u id]
添加到find\u commentable
方法中,并在用户模型中放置有许多:注释,如::commentable
。我已经尝试了几种不同的方法来回答,但现在不允许我提交注释。你知道会发生什么吗?什么是“可评论”的意思?它有哪些字段?听起来复杂的是,您希望根据提交注释的用户设置注释标志,但在创建事件之后,您实际上没有任何东西将注释和用户绑定在一起。您是否有办法在创建过程中获取当前用户?你可以设置旗子。如果没有,你可能需要重新审视你的模型。@Bricky好吧,这是一种多态关系。一条评论将属于一篇文章,在某些情况下,作为回复,它可能属于另一条评论。评论是通过使用表单进行的,表单不是特定于用户的,因为任何人都可以访问该网站并填写表单进行评论。@Bricky我添加了我试图将这些链接在一起的内容(不起作用),并且我还尝试使用下面答案中的代码。什么是“可评论”意味着
def comment_params
params.require(:comment).permit(:body, :email, :name).merge(admin_comment: current_user.admin)
end