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

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

ただいまの
回答率

90.47%

  • Ruby

    7942questions

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

  • Ruby on Rails

    7494questions

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

  • MySQL

    6018questions

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

  • AWS(Amazon Web Services)

    2085questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • Cloud9

    445questions

    Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

中間テーブルをrails cで作成しテストしたが、can't write unknown attribute 'member_id' というエラーになる

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 398

space-hippy

score 102

 前提・実現したいこと

railsでMemberモデルの相関関係を定義して出力するシステムを作っており、
中間テーブルとしてRelationshipモデルを作成していますが、
Memberモデルのプライマリキーをidだと型の都合が悪くmidというstring型に
しているのですが、それでマイグレーションまではうまくいったのですが、
rails c でrelationshipがうまくすくれるか試してみたのですが、
エラーになってしまいます 原因が分かる方、お力添えくださいm(__)m

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

2.4.1 :004 > relation = Relationship.new(member: member1, refer: member2, connect:member2, explain: member2, close: member2)
ActiveModel::MissingAttributeError: can't write unknown attribute `member_id`
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activerecord-5.0.7/lib/active_record/attribute.rb:182:in `with_value_from_database'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activerecord-5.0.7/lib/active_record/attribute_set.rb:53:in `write_from_user'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activerecord-5.0.7/lib/active_record/attribute_methods/write.rb:50:in `write_attribute_with_type_cast'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activerecord-5.0.7/lib/active_record/attribute_methods/write.rb:32:in `write_attribute'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activerecord-5.0.7/lib/active_record/attribute_methods.rb:361:in `[]='
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activerecord-5.0.7/lib/active_record/associations/belongs_to_association.rb:76:in `replace_keys'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activerecord-5.0.7/lib/active_record/associations/belongs_to_association.rb:14:in `replace'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activerecord-5.0.7/lib/active_record/associations/singular_association.rb:22:in `writer'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activerecord-5.0.7/lib/active_record/associations/builder/association.rb:119:in `member='
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activemodel-5.0.7/lib/active_model/attribute_assignment.rb:46:in `public_send'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activemodel-5.0.7/lib/active_model/attribute_assignment.rb:46:in `_assign_attribute'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activemodel-5.0.7/lib/active_model/attribute_assignment.rb:40:in `block in _assign_attributes'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activemodel-5.0.7/lib/active_model/attribute_assignment.rb:39:in `each'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activemodel-5.0.7/lib/active_model/attribute_assignment.rb:39:in `_assign_attributes'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activerecord-5.0.7/lib/active_record/attribute_assignment.rb:26:in `_assign_attributes'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activemodel-5.0.7/lib/active_model/attribute_assignment.rb:33:in `assign_attributes'
... 5 levels...
        from /usr/local/rvm/gems/ruby-2.4.1/gems/railties-5.0.7/lib/rails/commands/console_helper.rb:9:in `start'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/railties-5.0.7/lib/rails/commands/commands_tasks.rb:78:in `console'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/railties-5.0.7/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/railties-5.0.7/lib/rails/commands.rb:18:in `<top (required)>'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activesupport-5.0.7/lib/active_support/dependencies.rb:293:in `require'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activesupport-5.0.7/lib/active_support/dependencies.rb:293:in `block in require'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activesupport-5.0.7/lib/active_support/dependencies.rb:259:in `load_dependency'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activesupport-5.0.7/lib/active_support/dependencies.rb:293:in `require'
        from /home/ec2-user/environment/afiliasys/bin/rails:9:in `<top (required)>'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activesupport-5.0.7/lib/active_support/dependencies.rb:287:in `load'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activesupport-5.0.7/lib/active_support/dependencies.rb:287:in `block in load'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activesupport-5.0.7/lib/active_support/dependencies.rb:259:in `load_dependency'
        from /usr/local/rvm/gems/ruby-2.4.1/gems/activesupport-5.0.7/lib/active_support/dependencies.rb:287:in `load'
        from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from /usr/local/rvm/rubies/ruby-2.4.1/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
        from -e:1:in `<main>'

 該当のソースコード

#Memberマイグレーションファイル
class CreateMembers < ActiveRecord::Migration[5.0]
  def change

    #プライマリキーをデフォルトではないstring型カラムに設定
    create_table :members, primary_key: [:mid] do |t|

      #自分で設定したid
      t.string :mid, null: false

      #ここはいろいろカラムがあります

      #作成・更新年月日
      t.timestamps

    end
  end
end
#Relationshipマイグレーションファイル
class CreateRelationships < ActiveRecord::Migration[5.0]
  def change
    create_table :relationships do |t|
      t.string :member, index: true, foreign_key: true
      t.string :refer, index: true, foreign_key: { to_table: :members }
      t.string :connect, index: true, foreign_key: { to_table: :members } 
      t.string :explain, index: true, foreign_key: { to_table: :members }
      t.string :close, index: true, foreign_key: { to_table: :members }

      t.timestamps

      t.string [:member_mid, :refer_mid], unique: true
      t.string [:member_mid, :connect_mid], unique: true
      t.string [:member_mid, :explain_mid], unique: true
      t.string [:member_mid, :close_mid], unique: true

    end
  end
end
#Memberモデルファイル
class Member < ApplicationRecord
  self.primary_key = "mid"
  before_validation :avoid_symbol, :rand_mid
  before_save { self.email.downcase! }

 #ここは細かいカラムのバリデーションです

  has_secure_password



  has_one :relationships 


  has_one :referrer, through: :relationships, source: :refer
  has_many :reverses_of_refer, class_name: 'Relationship', foreign_key: 'refer_mid'
  has_many :referreds, through: :reverses_of_refer, source: :member

  has_one :connecter, through: :relationships, source: :connect
  has_many :reverses_of_connect, class_name: 'Relationship', foreign_key: 'connect_mid'
  has_many :connecteds, through: :reverses_of_connect, source: :member

  has_one :explainer, through: :relationships, source: :explain
  has_many :reverses_of_explain, class_name: 'Relationship', foreign_key: 'explain_mid'
  has_many :explaineds, through: :reverses_of_explain, source: :member

  has_one :closer, through: :relationships, source: :close
  has_many :reverses_of_close, class_name: 'Relationship', foreign_key: 'close_mid'
  has_many :closeds, through: :reverses_of_close, source: :member

  accepts_nested_attributes_for :relationships

  private

  #電話番号カラムの記号を取り除くメソッド
  def avoid_symbol
    self.tel = self.tel.delete("^0-9")
    self.s_tel = self.s_tel.delete("^0-9")
  end

  #midランダム生成メソッド
  def rand_mid
    self.mid = format("%0#{10}d", SecureRandom.random_number(10**10))
  end

end
#Relationshipモデルファイル
class Relationship < ApplicationRecord
  belongs_to :member
  belongs_to :refer, class_name: 'Member'
  belongs_to :connect, class_name: 'Member'
  belongs_to :explain, class_name: 'Member'
  belongs_to :close, class_name: 'Member'

  validates :member_mid, presence: true
  validates :refer_mid, presence: true
  validates :connect_mid, presence: true
  validates :explain_mid, presence: true
  validates :close_mid, presence: true

end

 試したこと

can't write unknown attribute member_idというエラーのためこのような記載のあった
Relationshipモデルファイルで、member_midやrefer_midのように書き換えました
他のファイルにも記載がないかgrepでmember_idを探しましたが、logの中にしかありませんでした

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

aws cloud9
Rails 5.0.7
mysql

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

modelをdestroyしてやり直したら解決できました!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    7942questions

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

  • Ruby on Rails

    7494questions

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

  • MySQL

    6018questions

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

  • AWS(Amazon Web Services)

    2085questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • Cloud9

    445questions

    Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

  • トップ
  • Rubyに関する質問
  • 中間テーブルをrails cで作成しテストしたが、can't write unknown attribute 'member_id' というエラーになる