Я пытался создать блог, и у меня есть 3 модели post, user, comment. Когда я создал comment, comment.post_id равно nil. Что я делаю не так?

< Сильный > comments_controller

  def new
    @comment = Comment.new
  end

  def edit
    @post = Post.find(params[:post_id])
  end

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

редактировать

< Сильный > post.rb

  has_many :comments, dependent: :destroy
  belongs_to :user

< Сильный > comment.rb

  belongs_to :user
  belongs_to :post

< Сильный > user.rb

  has_many :posts, dependent: :destroy

  has_many :comments, dependent: :destroy
0
vveare138 23 Фев 2015 в 19:57

2 ответа

Лучший ответ

Вот решение:

def create
  @post = Post.find(params[:post_id])
  @comment = @post.comments.new(params[:comment])
  @comment.user_id = current_user.id
  @comment.save
  redirect_to post_path(@post)
end

Источник: Ответ в stackoverflow

Итак, используйте следующую ассоциацию, как в источнике выше.

0
Community 23 Май 2017 в 11:58

Надеюсь, это сработает.

def create
  @post = Post.find(params[:post_id])
  @comment = Comment.new(comment_params.merge(user_id: current_user.id))
  @post.comments << @comment
  redirect_to post_path(@post)
end
0
DevMarwen 23 Фев 2015 в 17:15