#的未定义方法'reviews'[0x00007fa70dc93f40>

问题描述 投票:0回答:1
我的应用程序中有3种模型-用户,帖子和评论。用户has_many :posts发布has_many :reviews

发表信息或发表评论,用户应登录。

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

查看-评论#新

<div class="row"> <div class="col-md-offset-3 col-md-8"> <b> Add a review </b> </div> </div> <%= form_for [@post, @review] do |r| %> <div class="row"> <div class="col-md-offset-3 col-md-7"> <% render 'errors' %> </div> </div> <div class="row"> <div class="col-md-offset-3 col-md-7"> <div class="form-group"> <%= r.label :comment %> <%= r.text_area :comment, class: "form-control" %> </div> <%= r.submit "Add", class: "btn btn-primary btn-block" %> </div> </div> <% end %>

路线:

Rails.application.routes.draw do # root 'posts#index' root 'mains#home' resources :users resources :posts do resources :reviews end # resources :reviews resource :sessions, only: [:new, :create, :destroy] resources :passwords, only: [:new, :create, :edit, :update] end

日志中的参数:

{"authenticity_token"=>"XunDfWighjQFYPmGOuIBMXIaiKzNM1BEDiU5 OU2DxvZAvBCP+ERzYSEI/eA/FYIiEPKjo32BX6vqZDm2fQmHrQ==", "review"=> {"comment"=>"dsf"}, "commit"=>"Add", "post_id"=>"12"}

在任何地方都没有用户ID。以正确的方式传递'post_id'是正确的吗?

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

ruby-on-rails ruby-on-rails-5
1个回答
0
投票
您需要将user_id添加到审阅模型并将其关联。用户has_many :reviews,并审阅belongs_to :user。使用[]添加迁移

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

是的,将post_id传递给控制器​​是正确的
© www.soinside.com 2019 - 2024. All rights reserved.