У меня есть система комментариев на моем сайте, и я хочу добавить подпись администратора к комментариям, сделанным администратором.Не все комментарии оставляются пользователями, так как комментарии создаются с помощью форума всеми, кто посещает сайт, даже обычными пользователями и администраторами.
Пользователь считается администратором, если значение 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
comments_controller.rb
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
Как оставить комментарии к сообщению: (Для ответа на комментарии используется другая форма, вместо этого используется <%= simple_form_for([comment, Comment.new]) do |f| %>
.)
<%= simple_form_for([@post, Comment.new]) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.input :body, :as => :text, input_html: { maxlength: 300 }, label: false, placeholder: "What are your thoughts?", class: "form-control", wrapper_html: { id: 'contactTextarea' } %>
<%= f.input :name, label: false, placeholder: "Name (required) - Just your first name is okay too!", class: "form-control" %>
<%= f.input :email, label: false, placeholder: "Email Address (required) - This is not displayed with the comment", class: "form-control" %>
<div class="form-group hidden">
<%= f.input :nickname, :hint => "leave this field blank!", class: "form-control" %>
</div>
<%= f.submit "Post Comment", class: "btn btn-success" %>
<% end %>
Что я пробовал (в методе find_commentable
):
@commentable = User.find_by_id(params[:user_id]) if params[:user_id]
и
@commentable = User.friendly.find(params[:user_id]) if params[:user_id]
, в то время как в модели User я установил соотношение has_many :comments, as: :commentable