Rails установил имя пользователя в качестве атрибута комментария - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в рельсах и до сих пор выясняю, какие вещи принадлежат модели, а какие - в контроллере.Я создаю простую модель комментариев, которая относится к статьям.У меня есть атрибут: комментатор, который является строкой.Я хотел бы получить имя пользователя от current_user (я использую devise для своей функции входа в систему) Могу ли я сделать это в методе создания моего контроллера?

Что-то вроде

def create
    @post = Post.find(params[:post_id])
    @comment.commenter = current_user.username
    @comment = @post.comments.create(comment_params)
    redirect_to post_path(@post)
end

1 Ответ

0 голосов
/ 25 апреля 2018
class User < ActiveRecord::Base
  has_many :posts
  has_many :comments
end

class Post < ActiveRecord::Base
  belongs_to :user
  has_many :comments
end

class Comment < ActiveRecord::Base
  belongs_to :user #should have user_id: integer in Comment
  belongs_to :post #should have post_id: integer in comment
  delegate :username, to: :user, allow_nil: true
end

В контроллере сообщений: -

    def create
      @post = Post.find(params[:post_id])
      @comment = @post.comments.new(comment_params)
      @comment.user = current_user
      if @comment.save
        flash[:success] = "Comment saved successfully!"
        redirect_to post_path(@post)
      else
        flash[:error] = @comment.errors.full_messages.to_sentence
        redirect_to post_path(@post)
      end
    end

После этого вы можете получить все пользовательские данные любого комментария: -

comment = Comment.find(#id_of_comment)
comment.username => #will return username because of delegation

Ссылка для делегирования

...