前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。