ActiveAdmin 无方法错误

ActiveAdmin No method error

我在我的模型和表中添加了几个外键,它已经破坏了我对 Active Admin 的使用。我想知道是否有人知道解决此问题的方法或修复方法。

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

你把关联定义错了。

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

belongs_to 将外键放在这个 table 上,这正是您想要的。加入时,您希望获得此 table 上的 ID,而不必查找 student_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_ 只会让您头疼,并且会让其他开发人员感到困惑。