ruby on rails-关系表中模型的问题



我有两个表:人口统计种族。每个人口都需要有一个种族。我在人口统计表中为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列是正确的。

最新更新