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

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

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

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

MySQL

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

Ruby on Rails

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

Ruby on Rails 4

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

Q&A

解決済

1回答

484閲覧

【Ruby On Rails 】カラム名を取得するメソッドを知りたい

s_diff

総合スコア107

Ruby

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

MySQL

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

Ruby on Rails

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

Ruby on Rails 4

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

0グッド

0クリップ

投稿2018/10/04 00:43

以下のようなテーブルがあり、カラムemail1 〜 email10に入った値を削除したいのですが、カラム名を取得するメソッドがわからず立ち止まってしまいました。

ruby

1 create_table "cc_emails", force: :cascade do |t| 2 t.integer "user_id", limit: 4 3 t.string "email1", limit: 255 4 t.string "email2", limit: 255 5 t.string "email3", limit: 255 6 t.string "email4", limit: 255 7 t.string "email5", limit: 255 8 t.string "email6", limit: 255 9 t.string "email7", limit: 255 10 t.string "email8", limit: 255 11 t.string "email9", limit: 255 12 t.string "email10", limit: 255 13 t.datetime "created_at", null: false 14 t.datetime "updated_at", null: false 15 end

まずイテレータを回し、一覧表示しています。

ruby

1#index.html.erb 2 3<% cc_email = CcEmail.find_by(user_id: current_user.id) %> 4<% (1..10).each do |n| %> 5 <%= cc_email.send('email' + n.to_s) %>  6 <%= link_to mypage_delete_cc_path(user_id: current_user.id, n: n) do %> 7 <i class="fa fa-times-circle" aria-hidden="true"></i> 8 <% end %> 9 <% end %> 10<% end %>

これをコントローラで削除したいと思っていますが、以下のような実装ではうまくいきません。

ruby

1 def delete_cc 2 cc_email = CcEmail.find_by(user_id: params[:user_id]) 3 n = params[:n] 4 email_num = "email" + n.to_s 5 cc_email.update(email_num: nil) 6 redirect_to mypage_path, notice: "メールアドレスを削除しました" 7 end

cc_email.update(email_num: nil)の部分がうまくいかないのですが、カラム名を取得するメソッドがあるのでしょうか?
他のやり方等のアドバイスもありましたら、何卒よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

cc_email.update(email_num: nil)の部分がうまくいかないのですが

email_num: nilと書くと、「email_numというカラム」の意味になって正しく動作しません。email_num変数の内容を使いたければ、email_num => nilとしてください。


なお、(email1email10という、個別の名前でない連番であることから推測しましたが)同じ意味の列を多数持たせるのは、データベース設計上非正規型となって、あまり好ましいものではありません。user_idemailだけのテーブルを作って、それをhas_manyで持たせるような設計のほうがいいでしょう。

投稿2018/10/04 00:55

maisumakun

総合スコア145183

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

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

s_diff

2018/10/04 01:09

ご回答ありがとうございます。 なるほど。データベースについて勉強が必要ですね。 今後とも宜しくお願いいたします。
Orlofsky

2018/10/04 01:53

大学生のバイトでもテーブル設計を任せられるという理由でカラム名を連番で設計したシステムを見たことがあります。担当者にバグを指摘してもバグであることを認めないという方法で解決を図る人たちで、朝の4時までかかってデータの修復をしなければならず、一か月の残業時間が楽勝で100時間くらいになり、カラダがもたなくなって降りました。
s_diff

2018/10/04 02:05

正規化はそれほど重要なことだったんですね。 大切なことを教えていただき、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問