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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Q&A

解決済

2回答

2000閲覧

【Rails】チェック項目だけDBに保存したい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/09/11 02:14

###現在の状況
Railsアプリを個人開発しています。

現在「複数のチェックボックスから、選択した項目だけ文字列としてデータベースに保存する」機能を実装しているのですが、ググっても正解に辿り着けないでいます。

###やりたいこと
実装したいのは『映画のあらすじ文の引用元を、4つのストリーミングサービス名から1つ選んでDBに保存する』機能です。

元々は複数選択に対応しようと考えていたため、選択された項目を配列にして格納するノウハウの書かれた記事を参考にしていました。なので今はチェックの有無を「0」と「1」で取得する形になっています。

{"PrimeVideo"=>"0", "Netflix"=>"1", "Hulu"=>"0", "U-NEXT"=>"0"}

これを「一つの選択されたサービス名が保存される」ようにしたいのですが、いまいちどうコードを書いていいかわからない状況です。

あまりに初歩的な話で恐縮ですが、ご教授いただけましたら幸いです。

###現在のviewファイル

<%= form_tag("/movie/req") do %> ・ ・ ・  <p>あらすじの引用元</p>   <div class="box form4">    <%= check_box "service", "PrimeVideo" %>PrimeVideo    <%= check_box "service", "Netflix" %>Netflix    <%= check_box "service", "Hulu" %>Hulu    <%= check_box "service", "U-NEXT" %>U-NEXT  </div> ・ ・ ・  <input class="input-button" type="submit" value="送信"> <% end %>

###コントローラ/アクション

def req @movie = Movie.new( title: params[:title], directed: params[:directed], story: params[:story], service: params[:service], time: params[:time] ) @movie.save end

###作業環境
macOS Catalina
Rails6
MySQL

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

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

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

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

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

guest

回答2

0

ベストアンサー

いただいたアドバイスを元に、自己解決しました!

def req  params[:service].each do | di1 , di2 |   if di2 == "1"    @movie = Movie.new( title: params[:title], directed: params[:directed], story: params[:story], service:di1, time: params[:time]    )    @movie.save   end  end end

元々参考にしていた記事のコードを流用させていただきました。

  • params[:service]で値を受け取って、二つの変数にそれぞれサービス名チェック状態(0 or 1)を格納する
  • チェック状態が1である場合、相方の変数に格納されているサービス名をserviceカラムに保存する

その場しのぎでしかないような気はしますが…時間がないので前進できただけ今はいいことにします。
落ち着いたらrubyのメソッドやSQLの構文など、基礎的な部分を固めていきたいと思います。
きっかけとなっていただいた回答者の皆さまに、心よりお礼申し上げます。

投稿2020/09/12 04:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

チェック項目だけDBに保存したい

SQLでUPDATE文では

SQL

1UPDATE TABLE_NAME1 SET 2 COL1 = 10 3 , COL2 = 20 4 , COL3 = 30 5 , COL4 = 40 6WHERE 条件

が基本形になります。
要望通りにチェックされた個々の列毎にUPDATE文を用意するか、チェックされた列のすべてのパターンを用意したUPDATE文を用意する必要があります。

通常は面倒なので、チェック有無に関わらずひとつのUPDATE文で全部の列を網羅します。

投稿2020/09/11 02:50

Orlofsky

総合スコア16415

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問