ViewからControllerへ配列を渡す方法【Rails】
起こった問題
viewから配列で渡すと、コントローラ側では結合された状態で渡ってしまう。
form_tag update_users_path, method: "patch" do
= hidden_field_tag "users", users.ids
= submit_tag "送信"
view側
> users
> [1, 2, 3, 4]
controller側
> params[:users]
> "1,2,3,4"
users = params[:users]
Users.where(id: users)
#こうなってしまう
#Users.where(id: "1,2,3,4")
これでは、idが1のuserしかとれない。
やりたいこととしては、viewからcontrollerに、全userのidが入った配列を渡したい。
> params[:users]
> [1, 2, 3, 4]
users = params[:users]
Users.where(id: users)
#これがしたい
#Users.where(id: ["1", "2", "3", "4"])
しかし、paramsで受け取る際、配列としてうまく渡らずにいろいろ試行錯誤したので備忘録として残しておきます。
joinを使って文字列の配列として渡す
前提知識として、paramsは文字列として受け取ります
joinを使って文字列を区切って渡してみましょう。
form_tag update_users_path, method: "patch" do
= hidden_field_tag "users", users.ids.join(",")
= submit_tag "送信"
view側
> users
> "1,2,3,4"
controller側
> params[:users]
> "1,2,3,4"
> params[:users].split(",")
> ["1", "2", "3", "4"]
連結されたのでcontroller側でsplitで配列にしてあげます。
これで配列で渡したidに基づいたuserを取得することができます。
users = params[:users].split(",")
Users.where(id: users)
#Users.where(id: ["1" ,"2" ,"3" ,4"])
まとめ
viewでjoin、controllerでsplitでうまくいきました。
殴り書きなので記載ミスがあるかと思いますが、やさしくしてくれるとありがたいです。
Author And Source
この問題について(ViewからControllerへ配列を渡す方法【Rails】), 我々は、より多くの情報をここで見つけました https://qiita.com/ngron/items/c5a3f84fb366f6ec2f03著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .