Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在管理员按submit时将表值设置为true_Ruby On Rails_Ruby - Fatal编程技术网

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