【发布时间】:2017-11-24 12:59:15
【问题描述】:
在我的 rails 应用程序中,我有嵌套的属性。我正在使用jquery-ui-sortable 对嵌套字段集进行排序。
在提交表单时,我想保持排序顺序并在以编辑模式打开时显示字段集。我想保存数据库中设置的每个嵌套字段的排序位置。
我尝试了acts_as_list gem,但无法正常工作。我目前正在使用以下逻辑,它工作正常。
我想知道这个逻辑是否正确。请就它提出你的建议。感谢您提前回复。
逻辑是:
- 我对每个字段集都有一个表列
position,并且有default_scope { order("position ASC") }在我的模型中 - 提交表单时,控制器获取原始参数。在更新之前,我为每个字段设置了
position,并将其用于进一步处理
我得到以下原始参数:
{
"utf8" => "✓", "_method" => "put", "job" => {
"name" => "my another test",
"fields_attributes" => {
"1" => {
"field_value" => "Id",
"field_id" => "1",
"_destroy" => "false",
"id" => "9"
},
"0" => {
"field_value" => "Name",
"field_id" => "2",
"_destroy" => "false",
"id" => "10"
}
},
"include_header" => "1"
}, "search" => "", "controller" => "jobs", "action" => "update", "id" => "4"
}
permitted: false
我的控制器代码是:
before_action :set_position, only: :update
def update
@job = Job.where(id: params[:id]).first
if @job.update_attributes(job_params)
redirect_to jobs_url
end
end
def set_position
index = 1
params[:job][:fields_attributes].each do |f, params|
params[:position] = index
index += 1
end
end
def data_job_params
params.require(:job).permit(:name, :user_id, :include_header, fields_attributes: %i(id field_value field_id position _destroy))
end
它工作正常,但我想知道我是否以正确的方式这样做。
【问题讨论】:
标签: ruby-on-rails jquery-ui-sortable nested-attributes