내 레일 앱에 중첩 된 속성이 있습니다. 중첩 된 필드 집합을 정렬하려면 jquery-ui-sortable
을 사용하고 있습니다.Ruby on Rails - jquery-ui-sortable을 통해 정렬 할 때 중첩 된 속성을 정렬하고 싶습니다.
양식을 제출할 때 편집 모드로 열 때 정렬 된 순서를 유지하고 필드 세트를 표시하려고합니다. 데이터베이스에 설정된 각 중첩 필드의 정렬 된 위치를 저장하려고합니다.
나는 acts_as_list
보석을 시도했지만 제대로 작동하지 못했습니다. 나는 현재 다음과 같은 논리를 사용하고 있으며 잘 작동합니다.
이 논리가 올바른지 여부를 알고 싶습니다. 친절하게 제안 해주세요. 미리 답변 해 주셔서 감사합니다.
논리는 다음과 같습니다
- 나는 각 필드 세트 테이블 열
position
이 내 모델 - 양식이 제출되면, 컨트롤러는 원시 PARAMS 가져에
default_scope { order("position ASC") }
있습니다. 업데이트하기 전에, 나는 각 필드에 대한position
을 설정하고 추가 처리를 위해 이것을 사용
나는 다음과 같은 원시 PARAMS 수 :
{
"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
그것은의를 잘 작동하지만 올바른 방법으로이 작업을 수행하고 있는지 여부를 알고 싶습니다. 첫째
당신이 params[:job][:fields_attributes]
을 반복하는 each_with_index
을 사용할 수 있습니다 - 뭔가 같은 :
@SRack에 감사드립니다. 내 코드로 업데이트되었습니다. 다시 한번 감사드립니다. –