gpt4 book ai didi

ruby-on-rails - 评论 Controller 中的 ActiveModel::ForbiddenAttributesError

转载 作者:行者123 更新时间:2023-12-02 08:35:31 24 4
gpt4 key购买 nike

我有一个评论 Controller 和一个产品 Controller 。它在注释 Controller 的创建操作上失败,并出现禁止属性错误。

我已经从模型中删除了所有的 attr_accessible 并将它们移动到 Controller 中。仍然有问题。我不知道是什么。请任何人都可以告诉我我错过了什么。

 @comment = @commentable.comments.new(params[:comment]) <--- Fail here

来自更好错误的 Live Shell o/p:

   >> params[:comment]
=> {"content"=>"thanks"}

>> @commentable
=> #<Product id: 1, title: "Coffee Mug", description: "<p> This coffee mug blah blah", image_url: "http://coffee.com/en/8/82/The_P...", price: #<BigDecimal:7ff8769a9e00,'0.999E1',18(45)>, tags: nil, created_at: "2014-02-24 14:49:34", updated_at: "2014-02-24 14:49:34">

>> @commentable.comments
=> #<ActiveRecord::Associations::CollectionProxy []>


>> @commentable.comments.new(params[:comment])
!! #<ActiveModel::ForbiddenAttributesError: ActiveModel::ForbiddenAttributesError>
>>

评论 Controller :

class CommentsController < ApplicationController

def new
@comment = @commentable.comments.new
end

def create
@comment = @commentable.comments.new(params[:comment]) <-- fail here
if @comment.save
redirect_to product_path(params[:product_id])
else
render :new
end

结束

   def comments_params
params.require(:comments).permit(:commentable, :product_id, :content)
end

产品总监:

  class ProductsController < ApplicationController

def show
@product = Product.find(params[:id])
@commentable = @product
@comments ||= Comment.where(:commentable_id => params[:id])
@comment = Comment.new
end

def product_params
params.require(:product).permit(:title, :description, :image_url, :price, :tags, comments_attributes: [:product_id, :content])
end

型号:产品.rb

   class Product < ActiveRecord::Base

has_many :comments, as: :commentable
accepts_nested_attributes_for :comments
end

评论.rb

   class Comment < ActiveRecord::Base

belongs_to :commentable, polymorphic: true

end

最佳答案

我猜您正在使用 Rails4,因为您已经实现了 comments_params 方法。在 Rails 4 中,强参数用于将质量分配保护从模型中移到 Controller 中。您已经实现了方法 comments_params 但没有使用它。

替换

@comment = @commentable.comments.new(params[:comment]) 

@comment = @commentable.comments.new(comments_params) 

另外,更新comments_params如下

  def comments_params
params.require(:comment).permit(:commentable, :product_id, :content)
end

注意:需要单数 :comment 而不是复数 :comments

关于ruby-on-rails - 评论 Controller 中的 ActiveModel::ForbiddenAttributesError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21994781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com