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

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

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

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

Ruby

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

MySQL

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

Ruby on Rails

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

AWS(Amazon Web Services)

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

Q&A

解決済

1回答

988閲覧

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

space-hippy

総合スコア136

Cloud9

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

Ruby

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

MySQL

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

Ruby on Rails

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

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2018/06/01 12:57

前提・実現したいこと

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>'

該当のソースコード

Ruby

1#Memberマイグレーションファイル 2class CreateMembers < ActiveRecord::Migration[5.0] 3 def change 4 5 #プライマリキーをデフォルトではないstring型カラムに設定 6 create_table :members, primary_key: [:mid] do |t| 7 8 #自分で設定したid 9 t.string :mid, null: false 10 11 #ここはいろいろカラムがあります 12 13 #作成・更新年月日 14 t.timestamps 15 16 end 17 end 18end 19

Ruby

1#Relationshipマイグレーションファイル 2class CreateRelationships < ActiveRecord::Migration[5.0] 3 def change 4 create_table :relationships do |t| 5 t.string :member, index: true, foreign_key: true 6 t.string :refer, index: true, foreign_key: { to_table: :members } 7 t.string :connect, index: true, foreign_key: { to_table: :members } 8 t.string :explain, index: true, foreign_key: { to_table: :members } 9 t.string :close, index: true, foreign_key: { to_table: :members } 10 11 t.timestamps 12 13 t.string [:member_mid, :refer_mid], unique: true 14 t.string [:member_mid, :connect_mid], unique: true 15 t.string [:member_mid, :explain_mid], unique: true 16 t.string [:member_mid, :close_mid], unique: true 17 18 end 19 end 20end

Ruby

1#Memberモデルファイル 2class Member < ApplicationRecord 3 self.primary_key = "mid" 4 before_validation :avoid_symbol, :rand_mid 5 before_save { self.email.downcase! } 6 7 #ここは細かいカラムのバリデーションです 8 9 has_secure_password 10 11 12 13 has_one :relationships 14 15 16 has_one :referrer, through: :relationships, source: :refer 17 has_many :reverses_of_refer, class_name: 'Relationship', foreign_key: 'refer_mid' 18 has_many :referreds, through: :reverses_of_refer, source: :member 19 20 has_one :connecter, through: :relationships, source: :connect 21 has_many :reverses_of_connect, class_name: 'Relationship', foreign_key: 'connect_mid' 22 has_many :connecteds, through: :reverses_of_connect, source: :member 23 24 has_one :explainer, through: :relationships, source: :explain 25 has_many :reverses_of_explain, class_name: 'Relationship', foreign_key: 'explain_mid' 26 has_many :explaineds, through: :reverses_of_explain, source: :member 27 28 has_one :closer, through: :relationships, source: :close 29 has_many :reverses_of_close, class_name: 'Relationship', foreign_key: 'close_mid' 30 has_many :closeds, through: :reverses_of_close, source: :member 31 32 accepts_nested_attributes_for :relationships 33 34 private 35 36 #電話番号カラムの記号を取り除くメソッド 37 def avoid_symbol 38 self.tel = self.tel.delete("^0-9") 39 self.s_tel = self.s_tel.delete("^0-9") 40 end 41 42 #midランダム生成メソッド 43 def rand_mid 44 self.mid = format("%0#{10}d", SecureRandom.random_number(10**10)) 45 end 46 47end 48 49

Ruby

1#Relationshipモデルファイル 2class Relationship < ApplicationRecord 3 belongs_to :member 4 belongs_to :refer, class_name: 'Member' 5 belongs_to :connect, class_name: 'Member' 6 belongs_to :explain, class_name: 'Member' 7 belongs_to :close, class_name: 'Member' 8 9 validates :member_mid, presence: true 10 validates :refer_mid, presence: true 11 validates :connect_mid, presence: true 12 validates :explain_mid, presence: true 13 validates :close_mid, presence: true 14 15end 16

試したこと

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

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

aws cloud9
Rails 5.0.7
mysql

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

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

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

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

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

guest

回答1

0

自己解決

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

投稿2018/06/02 00:45

space-hippy

総合スコア136

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問