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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1568閲覧

【Ruby】特定のテーブルのカラムを呼び出せず、NoMethodError:undefined method `〇〇' for #<User:○○○>というエラーがでる

Hinoarashi.

総合スコア76

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/05/18 07:05

編集2021/05/18 07:08

前提・実現したいこと

Gmailの文字列をDBに入れるコードを実装しているのですが、エラーがでます。

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

experiment_gmail.rb:16:in `block in <class:User>': undefined method `name_sei=' for #<User:0x007f88d3b17278> (NoMethodError) from experiment_gmail.rb:9:in `map' from experiment_gmail.rb:9:in `<class:User>' from experiment_gmail.rb:3:in `<main>'

該当のソースコード

require 'gmail' class User USERNAME='gmailのアドレス' PASSWORD='gmailのパスワード' gmail = Gmail.new(USERNAME,PASSWORD) gmail.inbox.emails(:from => "メールアドレス" ).map do |mail| mail = mail.body.decoded.encode("UTF-8", mail.charset) name_sei = /氏名: (.+) (.+)/.match(mail) email = /メールアドレス:\s([\w\-._]+@[\w\-._]+.[A-Za-z]+)/.match(mail) user = User.new user.name_sei = name_sei[1..2] user.email = email[1] user.save end end

試したこと

最初experiment_gmail.rb:14:in `block in <main>': uninitialized constant User (NameError)というエラーがでたので、class Userを定義してエラーを回避しましたが、上記のエラーが起こりました。
name_seiはテーブルのカラムなので、メソッドではないような気がするのですが、どなたかエラーを回避する術を教えてもらえると嬉しいです。

よろしくお願いいたします。

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

Ruby:2.4.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

model User に name_sei というcolumnを作っていないからでしょう。
User の schemaを確認してください。
なければ migrationで追加しましょう

投稿2021/05/18 07:13

winterboum

総合スコア23567

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

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

Hinoarashi.

2021/05/18 07:46 編集

ご回答ありがとうございます。 恐縮ですが、すでにUserテーブルにname_seiのカラムは作られています。 ------- create_table "users" 省略 t.string "name_sei" ------- 実は、試験的にrootディレクトリーでruby 〇〇.rbでプログラムが動くかどうか確かめてるのですが、 rootディレクトリーではapp配下のuser.rbを呼び出せないなど不都合はありますでしょうか?
winterboum

2021/05/18 08:29

それでは動かないですね。 rails console でためしてください。 User.first.naame_sei してみると、Railsシステムがnamws_seiをもっているかわかります。 ところで、上の create tab;le のlistはどのfileですか? shema.rb ? dn/migrateなにがし?
winterboum

2021/05/18 08:35

ああ、致命的なミスがあります。 その class User 定義ではdatabase のテーブル users と無関係ですね。 class User < ApplicationRecord と ApplicationRecord から継承させないと。 Railsですよね? 純rubyではなく
Hinoarashi.

2021/05/19 09:31

やってみたらできました!非常に助かりました。。 ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問