【问题标题】:Strong Parameters and Nested Parameters - Rails 4强参数和嵌套参数 - Rails 4
【发布时间】:2014-02-11 20:54:32
【问题描述】:

使用 form_for([@post, @comment]) 向我的 cmets 控制器发送发布请求时出现错误。创建评论。

ActiveModel::ForbiddenAttributesError in CommentsController#create

导致错误的行:

@comment = @post.comments.build(params[:comment])

我知道这归结为一个强大的参数问题,但我似乎无法正确处理。目前我的帖子模型是:

posts.rb

class Post < ActiveRecord::Base
  has_many :comments, dependent: :destroy
end

对于 cmets:

comment.rb

class Comment < ActiveRecord::Base
  belongs_to :post
end

我目前对 cme​​ts 控制器的强参数设置是:

cmets_controller.rb

  private

    def comment_params
      params.require(:post).permit(comment: [:name, :body])
    end

最后,错误消息报告的参数是:

{"utf8"=>"✓",
 "authenticity_token"=>"MSX1PrrvfzYBr/DNYaMgSw3opWmaJs82xd11JfLPIqI=",
 "comment"=>{"name"=>"",
 "body"=>""},
 "commit"=>"Create Comment",
 "post_id"=>"1"}

如果我的强大参数设置被破坏,任何人都有任何想法 - 任何想法都将不胜感激。谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    在您的控制器中,您需要的是您的帖子,而不是您的评论。也许试试:

    def comment_params
      params.require(:comment).permit(:name, :body)
    end
    

    然后做:

    @comment = @post.comments.build(comment_params)
    

    看看有没有帮助。

    【讨论】:

    • 感谢您的回答,非常感谢。是否有任何指南或文档可以推荐我阅读有关嵌套参数的内容?
    • 好的,请在此处查看 github 页面:github.com/rails/strong_parameters
    【解决方案2】:

    几个问题...

    一个问题是您没有在build 方法中使用您的comment_params...

    @comment = @post.comments.build(params[:comment])
    

    应该是

    @comment = @post.comments.build(comment_params[:comment])
    

    但我们还有另一个问题,即您发送的params 实际上不是{post: {comment: 'stuff here'}},就像您的comment_params 方法所表明的那样。其实是{comment: 'stuff here'}

    所以你应该改变评论参数:

    def comment_params
      params.require(:comment).permit(:name, :body)
    end
    

    然后建立您的评论:

    @comment = @post.comments.build(comment_params)
    

    【讨论】:

      猜你喜欢
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      相关资源
      最近更新 更多