Ruby on rails 未定义的方法`审查';对于#<;用户:0x00007fa70dc93f40>;

Ruby on rails 未定义的方法`审查';对于#<;用户:0x00007fa70dc93f40>;,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,我的应用程序中有3个模型-用户、发布和评论。用户有很多:帖子,帖子有很多:评论 要发布帖子或删除评论,用户应登录 class ReviewsController < ApplicationController def new @post = Post.find(params[:post_id]) @review = Review.new end def create @post = Post.find(params[:post_

我的应用程序中有3个模型-用户、发布和评论。用户
有很多:帖子
,帖子
有很多:评论

要发布帖子或删除评论,用户应登录

class ReviewsController < ApplicationController    
  def new
    @post = Post.find(params[:post_id])
    @review = Review.new
  end

  def create        
    @post = Post.find(params[:post_id])
    @review = @post.reviews
    @review = current_user.reviews.build(comment_params)
    if @review.save
      flash[:success] = "Hurray!!"
      redirect_to user_path(current_user)
    else
      flash.now[:danger] = "Hurray!!"
      render 'new'
    end

    # @review = current_user.review.post.new(comment_params)
    # @review.save
    # flash[:success] = "Comment Posted succesfully"
    # redirect_to user_path(current_user)

  end

  private

  def comment_params
  #  params.require(:review).permit(:comment)
  params.require(:reviews).permit(:comment)
  end    
end
日志中的参数:

 {"authenticity_token"=>"XunDfWighjQFYPmGOuIBMXIaiKzNM1BEDiU5 
 OU2DxvZAvBCP+ERzYSEI/eA/FYIiEPKjo32BX6vqZDm2fQmHrQ==",
 "review"=> {"comment"=>"dsf"}, "commit"=>"Add", "post_id"=>"12"}
任何地方都没有用户id。通过“post_id”的方式是否正确


我希望我至少现在能够解释这个问题。

您需要添加
用户id
来查看模型并将它们关联起来。用户
有许多:评论
并且评论
属于:用户
。将迁移添加到

def change
  add_reference :reviews, :user, foreign_key: true
end
并更换控制器

class ReviewsController < ApplicationController    
  def new
    @post = Post.find(params[:post_id])
    @review = @post.reviews.new
  end

  def create        
    @post = Post.find(params[:post_id])
    @review = @post.reviews.build(review_params)
    @review.user_id = current_user.id
    if @review.save
      flash[:success] = "Hurray!!"
      redirect_to user_path(current_user)
    else
      flash.now[:danger] = "Hurray!!"
      render 'new'
    end
  end

  private

  def review_params
    params.require(:review).permit(:comment)
  end    
end
class-ReviewsController
是的,将
post\u id
传递给控制器是正确的

class ReviewsController < ApplicationController    
  def new
    @post = Post.find(params[:post_id])
    @review = @post.reviews.new
  end

  def create        
    @post = Post.find(params[:post_id])
    @review = @post.reviews.build(review_params)
    @review.user_id = current_user.id
    if @review.save
      flash[:success] = "Hurray!!"
      redirect_to user_path(current_user)
    else
      flash.now[:danger] = "Hurray!!"
      render 'new'
    end
  end

  private

  def review_params
    params.require(:review).permit(:comment)
  end    
end
class ReviewsController < ApplicationController    
  def new
    @post = Post.find(params[:post_id])
    @review = @post.reviews.new
  end

  def create        
    @post = Post.find(params[:post_id])
    @review = @post.reviews.build(review_params)
    @review.user_id = current_user.id
    if @review.save
      flash[:success] = "Hurray!!"
      redirect_to user_path(current_user)
    else
      flash.now[:danger] = "Hurray!!"
      render 'new'
    end
  end

  private

  def review_params
    params.require(:review).permit(:comment)
  end    
end