0

「教師」モデルと「ロボット」モデルの間に 1 対多の関係を設定する必要があります。各教師には多くのロボットがありますが、各ロボットには教師が 1 人しかいません。

私はそれを適切にセットアップしたと思っていましたが、レールコンソールでこれをいじろうとすると、次のように入力します:

teacher1.robots = [robot1, robot2]

ここで、teacher1 が有効な教師で、robot1 と robot2 が両方とも有効なロボットである場合、次のエラーが発生します。

SQLite3::SQLException: no such column: robots.teacher_id: SELECT "robots".* FROM "robots"  WHERE "robots"."teacher_id" = 14
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: robots.teacher_id: SELECT "robots".* FROM "robots"  WHERE "robots"."teacher_id" = 14

私は Ruby (および Ruby on Rails) に非常に慣れていませんが、行ったすべての調査で、モデルまたは移行をセットアップした方法に間違いを見つけることができません... 2 つのモデル ファイルを次に示します。そして移住。

*_create_robots.rb:

class CreateRobots < ActiveRecord::Migration
  def up
      create_table 'robots' do |t|
          t.text    'serial'
          t.references 'teachers'
      end
  end
  def down ; drop_table 'robots' ; end
end

robot.rb:

class Robot < ActiveRecord::Base
    belongs_to :teacher
end

教師.rb:

class Teacher < ActiveRecord::Base
has_many :robots

before_destroy :confirm_no_inventory
protected
def confirm_no_inventory
    unless self.usb_cords == 0 and self.simple_snaps == 0 and self.casters == 0
        errors.add(:base, "All checked out items must be returned before #{self.name} can be deleted")
        return false
    end
end
end

時間をかけてこれを調べてくれた人に前もって感謝します。問題が何であるか、またはそれを修正する方法についての考えは大歓迎です。

4

1 に答える 1

2

ヘルパーは単数形のモデル名referencesで使用する必要があります。複数形を使用した結果、アクティブ レコードが見つからないという列が作成されました。teachersteachers_id

移行をロールバックし、次のように変更して再実行します。

t.references 'teacher'
于 2013-07-23T02:05:07.570 に答える