Railsにおけるcreateアクションで
このようなパラメーターをpostしたときに
Parameters: {"utf8"=>"✓", "authenticity_token"=>"F98xi8sKXsi7vZmlhtGZpTXpMU0DsDv4FexHYHzVRgXpbkoiJF5429GL1+IIPGZMIo "hoge"=>{"0"=>{"title"=>"title1", "order"=>"1"}, "1"=>{"title"=>"title2", "order"=>"1"}}, "fuga"=>{"0"=>{"title"=>"title1", "order"=>"1"}, "1"=>{"title"=>"title2", "order"=>"1"}} "commit"=>"登録"}
saveする前に
hoge
の order
の値と fuga
の order
の値を
それぞれ送られてきた順番の数字に変更したいのですが
方法はございますでしょうか?
上記の例ですと
Parameters: {"utf8"=>"✓", "authenticity_token"=>"F98xi8sKXsi7vZmlhtGZpTXpMU0DsDv4FexHYHzVRgXpbkoiJF5429GL1+IIPGZMIo "hoge"=>{"0"=>{"title"=>"title1", "order"=>"1"}, "1"=>{"title"=>"title2", "order"=>"2"}}, "fuga"=>{"0"=>{"title"=>"title1", "order"=>"1"}, "1"=>{"title"=>"title2", "order"=>"2"}} "commit"=>"登録"}
のように変更したいです。
"hoge"=>{"0"
ここの部分は連番とは限らないです
"hoge"=>{"1"=>{"title"=>"title1", "order"=>"1"}, "0"=>{"title"=>"title2", "order"=>"2"}}
の場合もあります。
params自体の取得はわかるのですが、そのさきの書き換えがわからず
どうかご教示お願い致します。
##追記
controller
def new @piyo = Piyo.new @hoge.hoge.build @huga.huga.build end def create @piyo = Piyo.new(piyo_params) if @piyo.save redirect_to piyos_path else render 'new' end end private def piyo_params params.require(:piyo).permit(hoge: [:id, :order, :title, :_destroy], fuga: [:id, :order, :title, :_destroy]) end
model
class Piyo < ApplicationRecord has_many :hoges, dependent: :destroy has_many :fugas, dependent: :destroy
controllerとviewのファイルも掲載した方がよいと思います。
ちなみにですが、orderの書き換えはcontrollerで行うつもりですか?それとも、入力フォームのあるviewで行うつもりですか?(viewの方がよいと思いますが)
controllerで行うつもりです
viewは動的にフォーム要素を追加、並び替えしているので
なるほど、ということであれば、viewファイルは掲載されなくてもよいかもしれません。
なんにせよ、最低でもcontrollerは掲載されていないと、他の方も説明するのが難しいと思います。
理由としては、G2sZ6Cさんがどこまでわかっていて、どこから先がわからないのかを把握するための資料として、あった方がよいです。
わかっているかもしれないことまで説明したいとはだれも思わないはずです。
追記しました
確認しました。
model間の関係性がわからないのですが、piyo hoge huga はそれぞれassociationなどでつながっていない、無関係なモデルと考えて問題ないですか?
もし関係があるのであれば、それぞれのmodelファイルの掲載も必要になると思います。それぞれに関係がなければ必要ありません。
また、それとは別に、controllerにpiyo_paramsメソッドやhoge_paramsメソッド、huga_paramsメソッドがあるのであれば、それも掲載していただきたいです。
どこまでできているのかが、まだいまいちわからないため。
情報が不足していて申し訳ないです
興味を惹かれたのですが; そもそもとして なぜ params の内容書き換えが必要なのですか?
goufさん
フォーム要素を動的に作成、並び替えしていて、その最終的な順序をDBに保存したいのですが送信したタイミングではそれを判断する情報がないのでパラメータの送信された順序でDBに保存したいからです。
状況がわからないですが; であれば たとえば View 側で JavaScript のイベント処理を用いて: order の値を並び替えたあとの順序どおりに書き換えるといったことは考えられないでしょうか?
orderの値が判断できるような基準となるものがないのでjsで並び替えはできなさそうです。。
質問内容が理解できているかわからないですが、次のような感じのコードを動かしたいということでしょうか? : https://gist.github.com/gouf/3471f5dfb96667110fa46ca5eebdf21f
調べてみたらid値を配列で返すことはできるようでした
すいません
拝見しました
ありがとうございます。そうですね。
速度の出る通信回線がなく、手元にrailsの環境が用意できないため、私から回答できるようになるまでしばらくかかりそうです。
申し訳ありませんが、他の方の対応に期待します。
ご協力ありがとうございました。感謝致します。