我将有一个选项,评论模型可以用于在个人资料页面和社区页面中发布用户。目前我正在从事社区工作,并希望得到一些指导,因为我很困惑。
我得到的当前错误是我的CommentsController#Create的ActiveModel :: ForbiddenAttributesError。希望尽可能提供帮助,或者帮助我指出修复错误的方向。
关于人们看到评论的观点的问题是/ communities / show
模型
用户
has_one :profile
has_many :communities
has_many :comments, dependent: :destroy
社区
extend FriendlyId
friendly_id :title, use: [:slugged, :finders]
has_many :comments, dependent: :destroy
belongs_to :user
注释
belongs_to :user
belongs_to :community
路线
resources :communities do
resources :comments
end
控制器
社区
def show
@community = Community.friendly.find(params[:id])
@current_user = User.find(session[:user_id])
@comment = Comment.new
end
评论
before_filter :load_community
def create
@comment = @community.comments.build(params[:comment])
@comment.user_id = current_user.id
if @comment.save
redirect_to :back
else
redirect_to "/"
end
# @comment = Comment.new(comment_params)
# @comment.user_id = session[:user_id]
# if @comment.save && @comment.community_id
# flash[:notice] = "Comment has been posted"
# else
# flash[:alert] = @comment.errors.full_messages
# end
end
private
def load_community
@community = Community.friendly.find(params[:community_id])
end
def comment_params
params.require(:comment).permit(:text, :user_id, :community_id, :profile_id)
end
视图
/社区/显示
<%= render "profiles/index" %>
<h4><%= @community.title.capitalize! %></h4>
<%= @community.bio %>
<%= render "comments/new" %>
/评论/ _new
<%= form_for ([@community, @comment]) do |f| %>
<%= f.text_area :text, placeholder: "Enter New Comment Here ...", :cols => 50, :rows => 3, :class => 'text_field_message', :id => 'new_comment' %>
<%= f.submit :class => 'new_comment_button' %>
<% end %>
感谢所有帮助解释我犯错误的人,如果我可能需要问你可能要求我提出什么,请提前对不起。如有其他问题,请询问。
更新
我在控制台中看到的是
Started POST "/communities/dang/comments" for 127.0.0.1 at 2015-10-23 18:38:47 -0400
Processing by CommentsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"us8KNTLUZUdao13GK4OQId0YoUqf+CeLFIGjydnyWtI=", "comment"=> {"text"=>"www"}, "commit"=>"Create Comment", "community_id"=>"dang"}
Community Load (0.1ms) SELECT "communities".* FROM "communities" WHERE "communities"."slug" = 'dang' ORDER BY "communities"."id" ASC LIMIT 1
Completed 500 Internal Server Error in 11ms
ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError):
app/controllers/comments_controller.rb:17:in `create'
答案 0 :(得分:2)
好。
我的CommentsController#Create
的ActiveModel :: ForbiddenAttributesError
这基本上意味着您不允许create
方法中的必需属性。
这就是你需要的:
#app/controllers/comments_controller.rb
class CommentsController < ApplicationController
def create
@comment = @community.comments.new comment_params
@comment.save
end
private
def comment_params
params.require(:comment).permit(:text).merge(user_id: current_user.id)
end
end
您应该阅读strong params
以更好地了解其工作原理。
<强>多晶型强>
您还有另一个问题可以通过polymorphic association来解决:
简单地说,这允许您将模型与任意数量的模型相关联。
在您的实例中,您可以对users
和communities
发表评论,此功能将很好用:
#app/models/comment.rb
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :commentable, polymorphic: true
end
#app/models/user.rb
class User < ActiveRecord::Base
has_many :sent_comments, class_name: "Comment", foreign_key: :user_id
has_many :comments, as: :commentable
end
#app/models/community.rb
class Community < ActiveRecord::Base
has_many :comments, as: :commentable
end
这将允许您执行以下操作:
@user = User.find params[:id]
@user.comments.new comment_params
def comment_params
params.require(:comment).permit(:text).merge(user_id: current_user.id) #-> current_user from Devise
end
这允许您将@user.comments
和@community.comments
与一个关联一起使用。
您必须迁移commentable_id
&amp; commentable_type
列中的comments
列,但在此之后上述代码应该有效。