質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

1898閲覧

Rails6でparamsから値を取得する方法

_dana

総合スコア15

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2020/05/30 15:17

編集2020/05/30 17:19

Rails6でWebアプリケーションを作成しているのですが、newアクションにおいてform_withを使用しています
このformでは、text_fieldやtext_areaに入力された値についてはそのままテーブルに保存し、チェックボックスの値(checked_value = 1)についてはチェックの有無によってテーブルに保存する値を指定したいと考えていますが、それを実装する方法がわかりません

createアクション内でif文を用いてparamsの値を調べてupdateで指定した値を保存するという方法を考えたのですが、どうやらアクション内ではparamsの値を直接取得することはできないみたいでエラーは出ませんが処理がスルーされてしまいます

何か良い方法はないのでしょうか

追記

処理内容は以下の通りになります
ビューから返るチェックボックスの値はチェック時に1、非チェック時に0です

コントローラー

ruby

1# products_controller.rb 2def create 3 first_user_id = current_user.id if params[:first_user_id] == 1 4 second_user_id = current_user.id if params[:second_user_id] == 1 5 @product = Product.create(product_params) 6 @product.update(build_user_id: current_user.id) 7 redirect_to product_path(@product.id) 8end 9 10private 11def product_params 12 params.require(:product).permit(:title, :statement, :first_user_id, :second_user_id) 13end

ビュー

haml

1.form 2 =form_with model: @project, local: true do |form| 3 .build-user{'data-current_user': current_user.id} 4 =current_user.name 5 =form.label :title, 'Title' 6 =form.text_field :title 7 =form.label :statement 8 =form.text_area :statement, 'Statement' 9 =form.label :first_user_id, 'First User' 10 =form.check_box :first_user_id 11 =form.label :second_user_id, 'Second User' 12 =form.check_box :second_user_id 13 =form.submit

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

annaPanda

2020/05/30 15:26

どんな処理でスルーされたかを記載してください。
_dana

2020/05/30 17:20

ご指摘ありがとうございます。 コントローラーとビューのコードを追記しましたのでよろしくお願いします。
guest

回答1

0

ベストアンサー

if params[:first_user_id] == 1とありますが、paramsに来る値は(ファイルを除けば)文字列なので、この条件は絶対に成立しません。

投稿2020/05/30 22:22

maisumakun

総合スコア145952

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_dana

2020/05/31 03:11

ご回答ありがとうございます。 paramsに文字列が入っているとの認識がなかったです。 上記のif文の == 1の部分を == "1"と修正しましたがダメでした。 やはりアクション内で直接paramsの値を取得する方法はないのでしょうか。
maisumakun

2020/05/31 03:18

ビューをHTMLで見る、あるいはブラウザの開発ツールでネットワークを確認するなどで、実際に送られているキーを確認してみてください。 おそらく、「project[first_user_id]」(コントローラーからはparams[:project][:first_user_id])のようになっているのではないかと思われます。
_dana

2020/05/31 05:09

paramsのハッシュが二重構造になっているのを失念していました。 params[:project][:first_user_id]でできました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問