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

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

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

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

Ruby on Rails

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

Q&A

解決済

3回答

3532閲覧

Rails コントローラでパラメータ追加

no1knows

総合スコア3365

Ruby on Rails 5

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

Ruby on Rails

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

0グッド

2クリップ

投稿2019/04/17 02:33

編集2019/04/17 04:35

コントローラーでアップデートする前に、ビューで取得していないupdate_user_idのパラメータを追加したいです。

こちらを参考にしてみましたがうまくできませんでした。
https://stackoverflow.com/questions/5014804/rails-change-value-of-parameter-in-controller/5014844

どうぞよろしくお願いいたします。

def update company_params[:updated_user_id] = current_user.id #deviseを利用 respond_to do |format| if @company.update(company_params) format.html { redirect_to company_path, notice: 'Company was successfully updated.' } format.json { render :show, status: :ok, location: @company } else format.html { render :edit } format.json { render json: @company.errors, status: :unprocessable_entity } end end end
def company_params params.require(:company).permit(:company_name,:updated_user_id) end

###追記
下記で実現できましたが、できればもう少しスマートにparamsを変更できればと思います。
引き続きどうぞよろしくお願いいたします。

company_params[:updated_user_id] = current_user.id #deviseを利用

@company.updated_user_id = current_user.id #deviseを利用

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

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

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

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

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

ruby_math

2019/04/17 04:51

これ以上スマートな方法でのユーザーIDのパラメータ送信は思いつきませんね。 個人的には一番スマートな方法であると思いますし、要件は満たしていると考えます。
guest

回答3

0

ベストアンサー

Hash#mergeを利用して

ruby

1if @company.update(company_params.merge(update_user_id: current_user.id))

などはどうでしょうか?

投稿2019/04/17 06:52

asm

総合スコア15147

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

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

0

@company.update(company_params) を実行する直前で @company.updated_user_id = current_user.id を実行するようにしてみてください。

提示のコードが動かない原因は company_params が呼ぶ度に新しいオブジェクトを返すためです。 company_params[:updated_user_id] = current_user.id の実行後に company_params を呼んでも updated_user_id の値は入っていません。company_params で値をまとめたい場合は、その点を考慮してみてください。

hiddenフィールドを使う場合の懸念はおっしゃる通りだと思います。

投稿2019/04/17 04:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

回答失礼致します。

参考にされたサイトをみました。
少し記述方法が違いますね。

ワタシ的にはView側にhidden_fieldをおいたほうが簡単だと思います。

erb

1<%# なんとなくform_withで書いていますが御自身の仕様に合わせてください %> 2<%= form_with model: @conpany do |f| %> 3 4<%# @updated_user_id変数に現在ログインされているユーザーのIDを代入する %> 5<% @updated_user_id = current_user.id %> 6 7<%# 隠しフォーム @updated_user_idをvalueとして持たせてあげることで現在ログインされているユーザーのIDが送られる %> 8<%= f.hidden_field :updated_user_id, value:"#{@updated_user_id}" %> 9 10<% end %>

やりたいこととしては、現在ログインされているユーザーのIDをupdated_user_idに代入したいと言うことでよろしいでしょうか?

上記を試してみてください。

=======================================================================

確かにHidden_fieldは危険ですね、以下を試してみてください。

rb

1 def update 2 3 respond_to do |format| 4 if @company = Company.find(params[:id]) 5 @company.updated_user_id = current_user.id 6 @company.update(company_params) 7 format.html { redirect_to company_path, notice: 'Company was successfully updated.' } 8 format.json { render :show, status: :ok, location: @company } 9 else 10 format.html { render :edit } 11 format.json { render json: @company.errors, status: :unprocessable_entity } 12 end 13 end 14 end

こちらでいかがでしょうか?

投稿2019/04/17 04:16

編集2019/04/17 05:03
ruby_math

総合スコア90

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

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

no1knows

2019/04/17 04:28

ありがとうございます。 hiddenフィールドを用いるとデータ改ざんの恐れがあるため、できればアプリ側で設定したいと思っています。
ruby_math

2019/04/17 04:45

回答を更新しました、ご確認ください。
no1knows

2019/04/17 04:52

ありがとうございます!この方法でできました! ちなみにパラメータを直接編集することはできないのでしょうか?
ruby_math

2019/04/17 04:53

直接というと、どのような結果が好ましいでしょうか? コンソール上でという意味であってますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問