我有两个表:人口统计和种族。每个人口都需要有一个种族。我在人口统计表中为race_id创建了一个外键。以下是型号:
class Demographic < ActiveRecord::Base
has_one :race
end
class Race < ActiveRecord::Base
belongs_to :demographic
end
该视图正确地从种族表中提取种族列表。我认为问题出在我的人口统计控制器上。
奇怪的是,即使转储有一个值,@demographic['race_id']
也总是返回nil事件。
rails=v4.0.2
ruby=v2.0.0
psql=v9.1
这是因为,正如您所指出的,@demographic['race_id']
就是nil
。这会产生以下代码'Demographic was successfully updated' + nil
,如果您在irb中尝试,它也会以同样的方式失败。它期望一个字符串进行连接,结果却为零。你可以像这个'Demographic was successfully updated' + tmp.to_s
、这个"Demographic was successfully updated #{ tmp }"
或这个'Demographic was successfully updated' << tmp.to_s
一样解决它。你还需要弄清楚为什么它总是零,也许你打算调用@demographic.race_id
?
根据您的关系,
class Demographic < ActiveRecord::Base
has_one :race
end
class Race < ActiveRecord::Base
belongs_to :demographic
end
您的Race
模型应该有一个属性demographic_id
,而不是现在的Demographic
有一个race_id
列。。然后,要引用属于@demographic
的种族,您可以只执行@demographic.race
编辑:
在阅读了你下面的评论后,听起来你想要一些东西,如果你有一个种族(@race
),你可以得到它的所有人口统计@race.demographics
。您还希望人口统计实例@demographic
属于某个种族,这样当您执行@demographic.race
时,您就可以获得该人口统计的种族。
如果这是真的,那么你想把你的关系改为:
class Demographic < ActiveRecord::Base
belongs_to :race
end
class Race < ActiveRecord::Base
has_many :demographic
end
在这种情况下,在您的人口统计模型中有一个race_id
列是正确的。