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'是正确的吗?我希望至少现在能解释这个问题。
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
传递给控制器是正确的