有以下代码行:
def tree_service_params
params.permit(:id, { tree_service_categories_attributes: [:id, :title, :enabled, :_destroy, { tree_service_category_items_attributes: [:id, :image, :title, :description, :cost, :enabled] }] })
end
这是简单的Rails强大的参数。我需要打破这条线,因为它太长了。我使用Rubocop来满足Ruby指南。我该怎么办?提前致谢!
答案 0 :(得分:1)
这可能取决于您在Rubocop中启用的其他规则。但它看起来很简单,只需缩短线条。这是一个简单的方法:
def categories_attrs
{ tree_service_categories_attributes: [:id, :title, :enabled, :_destroy, items_attrs] }
end
def items_attrs
{ tree_service_category_items_attributes: [:id, :image, :title, :description, :cost, :enabled] }
end
def tree_service_params
params.permit(:id, categories_attrs)
end
你也可以多线,像这样:
def tree_service_params
params.permit(:id, {
tree_service_categories_attributes: [
:id, :title, :enabled, :_destroy, {
tree_service_category_items_attributes: [
:id, :image, :title, :description, :cost, :enabled
]
}
]
})
end
答案 1 :(得分:0)
一种方法是:您可以在多行上断开代码以使其更具可读性。但是,因为你允许很多属性,这意味着你的控制器中会有很多代码,这本身就是一件坏事。控制器应始终是瘦的。
params.permit(:id, {
tree_service_categories_attributes: [
:id, :title, :enabled, :_destroy, {
tree_service_category_items_attributes: [
:id, :image, :title, :description, :cost, :enabled
]
}
]
})
答案 2 :(得分:0)
如果U必须处理授权,则首选解决方案(针对不同属性组具有不同方法),因为U将能够在第一个方法中独立地授权每个方法,而不是在第二个方法中。
def categories_attrs
// if authorized return params object , if not return null.
{ tree_service_categories_attributes: [:id, :title, :enabled, :_destroy, items_attrs] }
end