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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

1307閲覧

ひとつのモデルからアクションに応じてバリデーションを変える方法

lack_un

総合スコア58

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/10/07 11:41

###前提・実現したいこと
DBと紐付かないモデルを作成し,include ActiveModel::Modelでお問い合わせのためのモデルを作りました。

いくつかお問い合わせのためのページが存在するので,それごとにモデルを作らずにまとめて一つのモデルで管理し,ページごとに異なるバリデーションに対応させようと考えていましたが,NomethodErrorなどのエラーのためうまく分岐できません。

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

ruby

1undefined local variable or method `params' for Inquiry:Class

###該当のソースコード

ruby

1class Inquiry 2 include ActiveModel::Model 3 4 attr_accessor :detail_id,:name,:name_kana, :email,:email_confirmation, :message,:contents,:address,:zip1,:zip2,:phone, :mobile,:fax,:contact_time,:contact_method,:occupation,:reserve_date,:shop_id,:agreement,:number 5 6 with_options if: self.action_name = 'reservation' 7 #バリデーションの内容 8 end 9 10end 11 12page_controller.rb 13 14 def reservation 15 # 入力画面を表示 16 @inquiry = Inquiry.new 17 @readonly = false 18 render :action => 'reservation' 19 end 20 21 def reservation_confirm 22 @inquiry = Inquiry.new(params[:inquiry]) 23 if @inquiry.valid? 24 @readonly = true 25 render :action => 'reservation_confirm' 26 else 27 render :action => 'reservation' 28 end 29 end 30 31 def reservation_thanks 32 # メール送信 33 @inquiry = Inquiry.new(params[:inquiry]) 34 InquiryMailer.received_email(@inquiry).deliver 35 InquiryMailer.admin_email(@inquiry).deliver 36 # 完了画面を表示 37 render :action => 'reservation_thanks' 38 end 39 40 41

###試したこと
たとえば、やりかたはよくないとおもいますが、ページごとにhiddenでデータを送るなどを検証してみましたが、うまくデータを取得することができませんでした。

やはりモデルを別にするべきでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージは「Inquiryにはparamsなんて変数やメソッドがないよ!」ということですね。
newで渡すのであれば

Ruby

1Inquiry.new(params)

もしくは

Ruby

1Inquiry.new({inquiry: params[:inquiry]})

としないとダメだったような気がします。

投稿2016/10/07 13:44

goute

総合スコア216

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

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

lack_un

2016/10/08 05:55

なるほど... まだモデルの部分のメソッドが何使えるのかよくわかっていないです。。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問