【问题标题】:Strong Parameters for Nested has_one Association嵌套 has_one 关联的强参数
【发布时间】:2014-12-19 16:10:02
【问题描述】:

我似乎遗漏了一些明显的东西,但我无法允许嵌套 has_one 关联的属性。

控制器:

def create
  @crossword = Crossword.new(crossword_params)

  if @crossword.save
    render :show, status: :created, location: [:api, @crossword]
  else
    render json: @crossword.errors, status: :unprocessable_entity 
  end
end

def crossword_params
  params.require(:crossword).permit(:title, :grid_size, grid_size_attributes: [:rows, :columns])
end

型号:

validates :title, :grid_size, presence: true
validates_associated :grid_size
has_one :grid_size
accepts_nested_attributes_for :grid_size

请求:

POST /api/crosswords.json HTTP/1.1
X-Accept: application/crosswords.v1
Content-Type: application/json
Host: localhost:3000
Connection: close
User-Agent: Paw/2.1 (Macintosh; OS X/10.10.0) GCDHTTPRequest
Content-Length: 83

{"crossword":{"title":"My Aweosme Crossword","grid_size":{"rows":15,"columns":15}}}

Rails 控制台输出:

Started POST "/api/crosswords.json" for 127.0.0.1 at 2014-12-19 11:05:13 -0500
Processing by Api::V1::CrosswordsController#create as JSON
Parameters: {"crossword"=>{"title"=>"My Aweosme Crossword", "grid_size"=>{"rows"=>15, "columns"=>15}}}
Can't verify CSRF token authenticity
Unpermitted parameters: grid_size
   (0.1ms)  BEGIN
   (0.1ms)  ROLLBACK
Completed 422 Unprocessable Entity in 2ms (Views: 0.1ms | ActiveRecord: 0.2ms)

我错过了一些琐碎的事情吗?这似乎是每个人都说的这样做。

【问题讨论】:

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


    【解决方案1】:

    在您的 POST 正文中将“grid_size”更改为“grid_size_attributes”。

    如果您想继续使用“grid_size”,请更新您的crossword_params 方法:

    def crossword_params
        params[:crossword][:grid_size_attributes] = params[:crossword][:grid_size] if params[:crossword][:grid_size]
        # NOTE :grid_size removed!
        params.require(:crossword).permit(:title, grid_size_attributes: [:rows, :columns])
    end
    

    【讨论】:

    • 打败了我......很可能OP没有使用fields_for,它生成了正确的参数密钥
    • 有什么办法可以允许 grid_size 代替吗?要求客户端发送 [model]_attributes 似乎是错误的。编辑:我仅将 rails 用于 JSON API,没有表单。
    • @eliot [model]_attributes 是在声明 accepts_nested_attributes_for 时附加到父模型的属性,因此它是必要的。但是,您可以执行简单的 1 行“hack”来实现您的结果。请参阅编辑。
    • @tagCincy 太棒了,谢谢! (P.S. 我也在辛辛那提!,几率是多少?)
    • @eliot 实际上相当高,因为它正在成为 Rails 开发的温床
    猜你喜欢
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    相关资源
    最近更新 更多