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

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

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

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

Ruby on Rails

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

Q&A

解決済

2回答

1332閲覧

条件によって保存するテーブルを変更したい。

Takuma_Tanaka

総合スコア128

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2016/08/22 09:11

御覧頂いてありがとうございます。
情報を色々調べてみたのですが、見つからないので教えて下さい。

###前提・実現したいこと
特定の条件によって保存するテーブルを分けたいと考えています。
複数の質問があるページで最初の質問に対する回答によって、テーブルAに保存するか、テーブルBに保存するかを選択させたいと考えています。
以下のソースで言うと犬が好きを選択した場合にテーブルA、猫が好きを選択した場合にテーブルBに保存させる感じです。
最初の回答が犬の場合と猫の場合で各ページにリンクするのではなく、
1ページ内で問2以降の質問内容が変わる感じです。

考えているviewの内容

view

1 <script language="javascript" type="text/javascript"> 2 <!-- 3 function Display(no){ 4 5 if(no == "no1"){ 6 7 document.getElementById("god").style.display = "block"; 8 document.getElementById("cat").style.display = "none"; 9 10 }else if(no == "no2"){ 11 12 document.getElementById("dog").style.display = "none"; 13 document.getElementById("cat").style.display = "block"; 14 15 } 16 17 } 18 --> 19 </script> 20 21貴方は犬が好きですか?猫が好きですか? 22 <h5><a href="javascript:;" onclick="Display('no1')">犬</a></h5> 23 <h5><a href="javascript:;" onclick="Display('no2')">猫</a></h5> 24 25<div id="dog"> 26<%= form_for @task, url: {action: 'confirm'} do |f| # <= 変更 %> 27 <div class="field"> 28 <p>どんな犬種が好きですか?</p> 29 <%= f.label :type %><br> 30 <%= f.text_field :type %> 31 </div> 32 <div class="field"> 33 <p>好きな理由は何ですか?</p> 34 <%= f.label :reson %><br> 35 <%= f.text_area :reson %> 36 </div> 37 <div class="actions"> 38 <%= f.submit 'next!' %> 39 </div> 40<% end %> 41</div> 42 43 <div id="cat" style="display:none;"> 44<%= form_for @task, url: {action: 'confirm'} do |f| # <= 変更 %> 45 <div class="field"> 46 <p>どんな猫種が好きですか?</p> 47 <%= f.label :type %><br> 48 <%= f.text_field :type %> 49 </div> 50 <div class="field"> 51 <p>好きな理由は何ですか?</p> 52 <%= f.label :reson %><br> 53 <%= f.text_area :reson %> 54 </div> 55 <div class="actions"> 56 <%= f.submit 'next!' %> 57 </div> 58<% end %> 59 </div>

###試したこと
modelで分けることができるのかなと思っていますが、どうすれば良いのか全く分からず困っています。
また最初の質問の答えも各テーブルに保存させたいと考えています。
情報が足りなければ追記致しますので、ご教示お願い致します。

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

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

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

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

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

guest

回答2

0

自己解決

時間はかかりましたが、自己解決しました。
そもそもの問題として、1つのモデルに2つの内容を条件分岐させようとしたので、ごちゃごちゃになっていました。
犬と猫のそれぞれのモデルを作ってコントローラーで条件分岐させたらできました。
御覧頂いた皆様ありがとうございました。

view

<script language="javascript" type="text/javascript"> <!-- function Display(no){ if(no == "no1"){ document.getElementById("god").style.display = "block"; document.getElementById("cat").style.display = "none"; }else if(no == "no2"){ document.getElementById("dog").style.display = "none"; document.getElementById("cat").style.display = "block"; } } --> </script> 貴方は犬が好きですか?猫が好きですか? <h5><a href="javascript:;" onclick="Display('no1')">犬</a></h5> <h5><a href="javascript:;" onclick="Display('no2')">猫</a></h5> <div id="dog" style="display:none;"> <%= form_for @dog, url: {action: 'confirm'} do |f| %> <%= f.hidden_field :dog_or_cat, :value => 'dog' %> <div class="field"> <p>どんな犬種が好きですか?</p> <%= f.label :type %><br> <%= f.text_field :cat_type %> </div> <div class="field"> <p>好きな理由は何ですか?</p> <%= f.label :reson %><br> <%= f.text_area :cat_reson %> </div> <div class="actions"> <%= f.submit 'next!' %> </div> <% end %> </div> <div id="cat" style="display:none;"> <%= form_for @cat, url: {action: 'confirm'} do |f| %> <%= f.hidden_field :dog_or_cat, :value => 'cat' %> <div class="field"> <p>どんな猫種が好きですか?</p> <%= f.label :type %><br> <%= f.text_field :cat_type %> </div> <div class="field"> <p>好きな理由は何ですか?</p> <%= f.label :reson %><br> <%= f.text_area :cat_reson %> </div> <div class="actions"> <%= f.submit 'next!' %> </div> <% end %> </div>

controller

def new @dog = Dog.new @cat = Cat.new id = params[:id] end def confirm if params[:dog] == nil @cat = Cat.new(cat_params) if @cat.valid? else render :new return end else @dog = Dog.new(dog_params) if @dog.valid? else render :new return end end end

投稿2016/08/30 00:57

Takuma_Tanaka

総合スコア128

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

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

0

モデルが受け取るパラメータの名前を変えておけばよいのではないでしょうか?
犬用のフォームが空=猫のテーブルにINSERT
猫用のフォームが空=犬のテーブルにINSERT

という感じです。

投稿2016/08/22 10:03

s.t.

総合スコア2021

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

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

Takuma_Tanaka

2016/08/23 06:45

ご回答ありがとうございます。 ご教示頂いた内容及び自分でも調べた内容を基に、最初の選択肢で「犬」を選んだ場合、:dog_or_catにdogを持たせて、「猫」を選んだ場合、:dog_or_catにcatを持たせるようにしました。 その上で、modelにて:dog_or_catがdogを持っているかcatを持っているかでテーブルを選択するようにしようとしたのですが、「undefined method `dog_or_cat' for nil:NilClass」とエラーが出ます。 submitしてないのでdog_or_catが空でエラーが出ているのは分かるのですが、submitしてからテーブルを選択させる方法が分かりません。 凄く単純な内容だとは思うのですが、検索能力が低いのか情報も見つけられません。 どのように書けば良いのか教えてもらえませんでしょうか? ```view <script language="javascript" type="text/javascript"> <!-- function Display(no){ if(no == "no1"){ document.getElementById("god").style.display = "block"; document.getElementById("cat").style.display = "none"; }else if(no == "no2"){ document.getElementById("dog").style.display = "none"; document.getElementById("cat").style.display = "block"; } } --> </script> 貴方は犬が好きですか?猫が好きですか? <h5><a href="javascript:;" onclick="Display('no1')">犬</a></h5> <h5><a href="javascript:;" onclick="Display('no2')">猫</a></h5> <div id="dog" style="display:none;"> <%= form_for @task, url: {action: 'confirm'} do |f| %> <%= f.hidden_field :dog_or_cat, :value => 'dog' %> <div class="field"> <p>どんな犬種が好きですか?</p> <%= f.label :type %><br> <%= f.text_field :cat_type %> </div> <div class="field"> <p>好きな理由は何ですか?</p> <%= f.label :reson %><br> <%= f.text_area :cat_reson %> </div> <div class="actions"> <%= f.submit 'next!' %> </div> <% end %> </div> <div id="cat" style="display:none;"> <%= form_for @task, url: {action: 'confirm'} do |f| %> <%= f.hidden_field :dog_or_cat, :value => 'cat' %> <div class="field"> <p>どんな猫種が好きですか?</p> <%= f.label :type %><br> <%= f.text_field :cat_type %> </div> <div class="field"> <p>好きな理由は何ですか?</p> <%= f.label :reson %><br> <%= f.text_area :cat_reson %> </div> <div class="actions"> <%= f.submit 'next!' %> </div> <% end %> </div> ``` model ```model class Task < ActiveRecord::Base if @task.dog_or_cat == 'dog' then self.table_name = 'dog' else self.table_name = 'cat' end end ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問