我有一個Enrollment
模型,其中status
列填充了(格式不正確)的種子文件。目前,所有這些status
值都可在EnrollmentState
列stateId
(其中包含負值且不是表格的典型索引列)中找到。以下是相關的架構表:Rails遷移文件無法訪問模型
db/schema.rb
我已經創造了Enrollment
模型來創建具有關聯關係的enrollment_state_id
列,並希望能與對應於status
列Enrollment_State
ID來填充它。
我曾嘗試用以下遷移做到這一點:
class UpdateColumnValues < ActiveRecord::Migration
def change
Enrollment.connection.schema_cache.clear!
Enrollment.reset_column_information
Enrollment.all.each do |e|
e.update_attribute(enrollment_state_id: EnrollmentState.find_by(stateId: e.status).id)
end
end
end
但是,遷移文件無法在數據庫中找到了Enrollment
數據!我得到了我的控制檯此錯誤運行rake db:migrate
後:
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Mysql2::Error: Table 'enrollment.enrollment' doesn't exist: SELECT `enrollment`.* FROM `enrollment`/Users/ben/Desktop/enrollment_app/db/migrate/20150711175101_update_column_values.rb:6:in `change'
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'enrollment.enrollment' doesn't exist: SELECT `enrollment`.* FROM `enrollment`
/Users/ben/Desktop/enrollment_app/db/migrate/20150711175101_update_column_values.rb:6:in `change'
Mysql2::Error: Table 'enrollment.enrollment' doesn't exist
/Users/ben/Desktop/enrollment_app/db/migrate/20150711175101_update_column_values.rb:6:in `change'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
任何想法,爲什麼我的移民文件無法訪問我Enrollment
或EnrollmentState
模式?或者如何以另一種方式做到這一點?
請勿在數據庫列中使用大寫字母 - 任何以大寫字母開頭的字符都應該是Ruby中的常量,而具有像「Foo.BAR」或「Foo.Bar」等屬性的Rails模型真的讓人困惑。改用蛇形箱。 – max
你不會碰巧在你的'app/models/enrollment.rb'中做了'table_name'enrollment''這樣的愚蠢行爲嗎? Rails可以找到模型 - 但sql查詢使用的是錯誤的表名。這是最有可能的原因,除非你已經搞糊塗了[inflector](http://api.rubyonrails.org/classes/ActiveSupport/Inflector/Inflections.html)這個單詞'enrollment',這是不太可能的。 – max
@max,我確實做了一些愚蠢的事情。我在'app/models/enrollment.rb'中有self.table_name ='enrollment'。我不記得爲什麼,也許對於我已經實現的搜索功能。我不能說我明白爲什麼這麼糟糕,但我會嘗試改變它,看看會發生什麼。 –