我似乎遗漏了一些明显的东西,但我无法允许嵌套 has_one
关联的属性。
Controller :
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)
我错过了一些微不足道的东西吗?这似乎是每个人都说要这样做的方式。
最佳答案
将 POST 正文中的“网格大小”更改为“网格大小属性”。
如果您想继续使用“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
关于ruby-on-rails - 嵌套 has_one 关联的强参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27569774/