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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

Ruby on Rails 5

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

解決済

1回答

870閲覧

form_forでcurrent_user_idが渡せない。。

engeng

総合スコア15

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

Ruby on Rails 5

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

0グッド

0クリップ

投稿2018/09/03 14:09

current_user_idが渡らなくて困っています

どのUserのOrderかが分かるようにしたいのですが、user_idがnilとなってしまいます。

モデルのリレーションは済みです。

ざっくり
userモデル
orderモデル
orderコントローラー

発生している問題・エラーメッセージ

form

1<%= form_for @order, url: orders_path do |f| %> 2 3 <p> 4 <%= f.text_field :quantity, placeholder: '数を入力してください' %> 5 <% if @order.errors.messages:quantity].any? %> 6 <span class="error"><%= @order.errors.messages[:quantity][0] %></span> 7 <% end %> 8 </p> 9 <p> 10 <%= f.hidden_field :user_id, value:current_user.id %> 11 </p> 12 <%= f.check_box :agreement, :as => :boolean, checked:false %> 13 <a href="http://localhost:3000/pages/policy">利用規約に同意する</a> 14 15 <p> 16 <%= f.submit '注文する', class: 'submit_button' %> 17 </p> 18 </div> 19 <% end %>

controller

1def create 2 @user = current_user 3 @tpoint = @user.point 4@order = Order.new(order_params) 5 if @order.save && @tpoint >= @order.price 6 order 7 else 8 redirect_to charges_path 9 end 10 end

試したこと

①<%= f.hidden_field :user_id, value:current_user.id %>
をフォームに入れることで、渡せるのかなと思いましたが失敗。

②コントローラーに書くやり方も試しましたが、なるべくform_forの中で完結させたいなと思っています
どなたかご教授願えませんでしょうか?よろしくお願いいたします

補足情報(FW/ツールのバージョンなど)

Ruby on Rails5
HTML5
CSS3

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

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

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

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

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

guest

回答1

0

ベストアンサー

formにhidden_fieldとして渡すのはやめたほうがよいでしょう。

hidden_fieldは、ブラウザ側に一度出力され、submitされた時にparamsとして戻ってきます。
が、その時に一度ユーザーの干渉できる状態に置かれます。
(DOMを書き換えることができます)

すなわち、任意のidを渡すという攻撃が可能です。

Controllerのcreateで、

@order = Order.new(order_params) @order.user = current_user if @order.save ... else ... end

とするのが一般的だと思います。

投稿2018/09/03 14:57

takumiabe

総合スコア661

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

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

engeng

2018/09/03 17:11

早速のご回答感謝いたします。 hidden便利ですが気をつけて使うべきなんですね! 無事、実装の方できました!助かりました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問