我的应用程序中有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”是正确的吗?
我希望至少能够现在解释这个问题。
答案 0 :(得分:1)
您需要将user_id
添加到Review模型并将其关联。用户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
传递给控制器是正确的