1

嗨,我对 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 控制台

    lender = Lender.find(2)
    lender.sniffs

我明白了

=> nil

我以为我会在嗅探中获得第二个记录。如果我输入这个

Sniff.find(lender.sniff_id).sniff_desc

我得到正确答案

=> "OK" 

但是该代码似乎违背了建立一对多关系的整个目的。

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

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

4

1 回答 1

1

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

你必须改变:

belongs_to :sniffs

至:

belongs_to :sniff

有了这个,你应该能够做到:

lender = Lender.find(2)
lender.sniff.sniff_desc #=> "OK"
于 2012-05-19T07:13:51.867 回答