私のレールアプリではネストされた属性があります。私はjquery-ui-sortable
を使ってネストされたフィールドセットをソートしています。Ruby on Rails - jquery-ui-sortableでソートするときにネストされた属性をソートしたい
フォームの送信時に、ソート順を維持し、編集モードで開くときにこのフィールドセットを表示する必要があります。私は各入れ子フィールドのソートされた位置をデータベースに保存したい。
私はacts_as_list
宝石を試しましたが、動作させることができませんでした。私は現在、次のロジックを使用しており、正常に動作します。
このロジックが正しいかどうかを知りたいです。親切にあなたの提案をしてください。事前にお返事いただきありがとうございます。
ロジックは次のとおりです。
- 私は、各フィールド・セットのテーブル列
position
を持っていると私のモデルでdefault_scope { order("position ASC") }
- フォームが送信されると、コントローラは生のparamsを取得しています。更新する前に、私は、フィールドごとに
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
にですうまく動作しますが、正しい方法でこれを実行しているかどうかを知りたいのです。
@SRackにお返事ありがとうございます。私のコードで更新されました。再度、感謝します。 –