协会 - 外键

时间:2014-04-15 20:27:03

标签: ruby-on-rails associations

我有两个对象:

create_table "conditions", force: true do |t|
    t.string   "name"
    t.integer  "condition_category_id"
 end

create_table "condition_categories", force: true do |t|
    t.string   "name"
end

我正在尝试使用另一列中的条件类别名称列出我的条件。但是,因为我用下划线命名它,我对如何正确设置关联有点困惑。我注意到模型被重写为ConditionCategory,但我仍然无法正常工作。

这是我的条件

模型
class Condition < ActiveRecord::Base
    belongs_to :category, class_name: 'ConditionCategory'
end

在我看来

<td><%= condition.category.name %></td>

相对较新的rails,所以非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

您有两种选择。

1.如 @gregates 建议您在foreign_key模型中将Condition添加到您的关联

class Condition < ActiveRecord::Base
    belongs_to :category, class_name: 'ConditionCategory',
    foreign_key: 'condition_category_id'
end

2.只需修改你的Condition模型。这非常简单和准确。

class Condition < ActiveRecord::Base
belongs_to :condition_category
end

在您看来,您必须像这样改变

<td><%= condition.condition_category.name %></td>

获取与condition_category

相关联的condition的名称

答案 1 :(得分:1)

请参阅foreign_key option for the belongs_to relation。外键应该与关联的名称匹配,而不是class_name(当它们不同时)。所以你需要同时指定:

belongs_to :category, class_name: 'ConditionCategory',
                      foreign_key: 'condition_category_id'

或者,您可以将数据库中的外键列重命名为category_id