关系表中的模型问题

问题描述 投票:0回答:2

我有两个表:人口统计种族。每个人口统计都需要有一个种族。我在人口统计表中为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
红宝石 = v2.0.0
psql = v9.1

ruby-on-rails forms postgresql relationship
2个回答
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


1
投票

根据你们的关系,

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
列是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.