Rails:一对多如何访问来自One的Many中的数据

时间:2012-05-19 07:08:05

标签: ruby-on-rails one-to-many

嗨,我对Rails很陌生,很抱歉,如果这是愚蠢的话。我一直在寻找几个小时。甚至不确定要问什么。非常感谢您的帮助。

我正在尝试使用代码和描述的表格。然后是另一个主表,其中包含代码。加入这两个表,以便我可以按代码排序并拉出描述。我似乎无法弄清楚拉动描述的代码。

这是代码和说明迁移

create_table :sniffs do |t|
  t.string "sniff_desc", :limit => 5
  t.timestamps
end    

这是主表迁移

create_table :lenders do |t|
  t.integer "sniff_id"
  t.timestamps
end    

add_index("lenders", "sniff_id")

这些是模型

class Lender < ActiveRecord::Base
  belongs_to :sniffs
  scope :ranked, order("lenders.sniff_id ASC")
end

class Sniff < ActiveRecord::Base
  has_many :lenders
end

嗅探表是

id  sniff_desc
 1  Great
 2  OK
 3  Bad

贷方表是

id  sniff_id
 1  2
 2  2
 3  3

这是我无法弄清楚的?如何为特定的贷方实例获取sniff_desc。例如,我在lender.id(2),我想得到它的sniff_desc“OK”。

所以,如果我是rails console

    lender = Lender.find(2)
    lender.sniffs

我得到了

=> nil

我以为我会嗅到第二个记录。如果我输入

Sniff.find(lender.sniff_id).sniff_desc

我得到了正确的答案

=> "OK" 

但是这段代码似乎打败了做一对多关系的整个目的。

我不理解一对多正确吗?或者我该怎么做才能解决这个问题?

非常感谢你的帮助。我觉得这个问题太简单了,所以我找不到其他人问过这个问题了?!

1 个答案:

答案 0 :(得分:1)

你几乎做对了。唯一的问题是belongs_to使用单数,而不是复数。

你必须改变:

belongs_to :sniffs

要:

belongs_to :sniff

有了这个你应该能够:

lender = Lender.find(2)
lender.sniff.sniff_desc #=> "OK"