2017-10-30 13 views
0

私のモデルとテーブルにいくつかの外部キーを追加しました。それ以来、Active Adminの使用が壊れています。私は、誰かがこの問題の回避策または回避策を知っているのだろうかと思っています。私はエラーを取得していますActiveAdminメソッドエラーがありません

schmea.rb

create_table "students", primary_key: "student_id", id: :string, force: 
:cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| 
    t.string "last_name" 
    t.string "first_name" 
    t.string "home_address" 
    t.string "home_city" 
    t.string "home_state" 
    t.string "home_zip" 
    t.string "school_year_address" 
    t.string "school_year_city" 
    t.string "school_year_zip" 
    t.string "room_number" 
    t.string "home_phone" 
    t.string "cell_phone" 
    t.boolean "new_student" 
    t.boolean "returning_student" 
    t.string "athletic_team" 
    t.bigint "user_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.index ["user_id"], name: "fk_rails_148c9e88f4" 
end 
add_foreign_key "emergency_contacts", "students", primary_key: "student_id" 
add_foreign_key "students", "users" 
add_foreign_key "vehicles", "students", primary_key: "student_id" 

student.rb学生モデル

class Student < ApplicationRecord 
    self.primary_key = :student_id 
    belongs_to :user 
    has_one :emergency_contact 
    has_one :vehicle 
end 

は、誰もがこのための修正を発見しましたか?

undefined method `emergency_contact_id_eq' for Ransack::Search<class: Student, base: Grouping <combinator: and>>:Ransack::Search 
+0

'emergency_contact_id_eq'の代わりに' emergency_contact_id_equals'を試してくださいhttps://activeadmin.info/3-index-pages.html#index-filters –

答えて

1

アサーションを間違って定義しました。

class Student < ApplicationRecord 
    self.primary_key = :student_id 
    belongs_to :user 
    belongs_to :emergency_contact, class_name: 'User' 
    has_one :vehicle 
end 

belongs_toこのテーブルに外部キーを配置し、正確に何をしたいです。あなたが参加するときに、student_idがこのレコードと一致するレコードを探す必要がなく、このテーブルにIDを持つことを望みます。

また、外部キー列と正しい外部キー制約を追加することを確認する必要があります。

class AddEmergencyContactIdToStudents < ActiveRecord::Migration[5.0] 
    def change 
    add_reference :students, :emergency_contact, foreign_key: false 
    add_foreign_key :students, :users, column: :emergency_contact_id, 
    end 
end 

私も強く非標準プライマリキーを使用しないことをお勧めします。 PKをプレフィックスとしてstudent_と入力すると、頭痛だけでなく、他の開発者を混乱させるでしょう。

+0

アソシエーションを定義している最初の部分については、まあ、私はしませんか?私は長いためテーブルをいくつか消しましたが、基本的にユーザーには1人の学生がいて、学生には1台の車両と1人の緊急連絡先があり、両方とも別個のテーブルです。私はすべてのテーブルにuser_idフィールドを持たせるつもりだったので、ベースユーザだけが自分の情報を見ることができ、テーブルの誰もが見ることはできません。私は自分のモデルを混ぜるだけですか? –

+0

アクセス制御は、データベース設計ではなく、コントローラレベルで実行されます。複数のレベルで外部キーを複製しないようにする必要があります。論理的で効果的なクエリ/ジョインからデータベースを計画します。 – max

関連する問題