Rails 3.2.12未初始化的常量错误

时间:2014-03-21 01:10:50

标签: ruby-on-rails ruby-on-rails-3.2

我整个下午一直在我的桌子上捶打我试图超越未初始化的常量错误,但似乎无法超越它。我有以下型号:

sub_award.rb

class SubAward < ActiveRecord::Base
  has_many :sub_awards_colleges, foreign_key: [:award_id, :sub_id]
  has_many :colleges, through: :sub_awards_colleges
end

sub_awards_colleges.rb

class SubAwardsCollege < ActiveRecord::Base
  belongs_to :sub_award, foreign_key: [:award_id, :sub_id]
  belongs_to :college
end

colleges.rb

class College < ActiveRecord::Base
  has_many :sub_awards_colleges, foreign_key: [:award_id, :sub_id]
  has_many :sub_awards, through: :sub_awards_colleges
end

当我尝试从我的视图中调用sub_award.colleges时,我收到错误:

ActionView::Template::Error (uninitialized constant SubAward::SubAwardsCollege)

我相信我已经遵循了所有正确的rails约定,并且我在sub_award模型中有其他关联,我设置相同并且工作正常。表格看起来像(省略了不相关的属性):

mysql> DESCRIBE sub_awards_colleges;
+------------+---------+------+-----+---------+----------------+
| Field      | Type    | Null | Key | Default | Extra          |
+------------+---------+------+-----+---------+----------------+
| id         | int(11) | NO   | PRI | NULL    | auto_increment |
| award_id   | int(11) | NO   |     | NULL    |                |
| sub_id     | int(11) | NO   |     | NULL    |                |
| college_id | int(11) | NO   | MUL | NULL    |                |
+------------+---------+------+-----+---------+----------------+
mysql> DESCRIBE sub_awards;
+--------------------------+--------------+------+-----+---------+-------+
| Field                    | Type         | Null | Key | Default | Extra |
+--------------------------+--------------+------+-----+---------+-------+
| award_id                 | int(11)      | NO   |     | NULL    |       |
| sub_id                   | int(11)      | NO   |     | NULL    |       |
mysql> DESCRIBE colleges;
+-------------------------+---------------+------+-----+---------+----------------+
| Field                   | Type          | Null | Key | Default | Extra          |
+-------------------------+---------------+------+-----+---------+----------------+
| id                      | int(11)       | NO   | PRI | NULL    | auto_increment |

如有任何帮助,请与我们联系,如果您希望我提供更多信息,请与我们联系。谢谢!

2 个答案:

答案 0 :(得分:0)

您可能错过了将sub_awards_colleges.rb文件放在app / models中! 我有一次类似的问题。 另外为什么在sub_awards_colleges中的award_id和sub_id列,据我猜,你有一个映射表应该将它映射到大学。并且在映射中没有使用college_id,所有映射都基于award_id和sub_id。这非常令人困惑。您可能希望再次查看映射。

答案 1 :(得分:0)

我解决了我的问题,但我仍然不完全确定问题是什么。为了解决我吹掉现有的sub_awards_college.rb文件。然后我创建了一个新的迁移来删除sub_awards_colleges表并重新创建它并生成一个新的sub_awards_college.rb模型。我用我的关联重新填充了sub_awards_college.rb文件:

belongs_to :sub_award, foreign_key: [:award_id, :sub_id]
belongs_to :college, class_name: "College"

添加class_name选项(虽然根据约定不应该是必需的)并且还为sub_award.rb关联添加了其他参数,因此它读作:

has_many :sub_awards_colleges, foreign_key: [:award_id, :sub_id], source: :sub_awards_colleges, class_name: "SubAwardsCollege"
has_many :colleges, through: :sub_awards_colleges, after_add: :invalidate_matching, after_remove: :invalidate_matching, source: :college, class_name: "College"

再次,根据惯例不应该是必要的,但重新启动我的应用程序,它现在正在工作。所以不能确定我的问题是什么,也许数据库中有关于我的表格如何设置以便它们与模型没有正确对齐的东西,但它现在正在工作并且感谢您花时间来审查和提供评价。