因此,rails 5中有正在工作的部分代码。我正在制作具有多层嵌套属性的大型表单。我有一个强大的参数列表:
params.require(:lexeme).permit(
:word, :homonym_number, :see_other_lexeme_id, :semantic_description, :afterword,
variants_attributes: [ :word, :id, :_destroy, proofs_attributes: [ :word, :language_id, :meaning, :id, :_destroy, language_mode_ids: [] ] ]
)
当我尝试更改订单时...
params.require(:lexeme).permit(
:word, :homonym_number, :see_other_lexeme_id, :semantic_description, :afterword,
variants_attributes: [ :word, :id, :_destroy, proofs_attributes: [ :word, :language_id, :meaning, :id, language_mode_ids: [], :_destroy ] ]
)
我得到:
syntax error, unexpected ']', expecting =>
...guage_mode_ids: [], :_destroy ] ]
... ^):
所以,Rails大师,这里的这种简单语法有什么问题,总是需要将数组参数放在最后吗?如果我在参数中有更多数组怎么办?
答案 0 :(得分:1)
问题是,根据语法糖词汇分析,最后一个:_destroy
应该是key => value
。
如果要保留新订单,则需要像这样将language_mode_ids: []
设为文字Hash
:
params.require(:lexeme).permit(
:word, :homonym_number, :see_other_lexeme_id, :semantic_description, :afterword,
variants_attributes: [ :word, :id, :_destroy,
proofs_attributes: [
:word, :language_id, :meaning, :id, {language_mode_ids: []}, :_destroy
]
]
)
Ruby试图通过允许您指定language_mode_ids: []
来帮助您,但是它将要求其右侧的所有参数也代表一个键值对。
由于:_destroy
只是一个符号,解释器不知道如何处理。这就是为什么您的第一笔订单有效而新的订单无效的原因。