嗨,我对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"
但是这段代码似乎打败了做一对多关系的整个目的。
我不理解一对多正确吗?或者我该怎么做才能解决这个问题?
非常感谢你的帮助。我觉得这个问题太简单了,所以我找不到其他人问过这个问题了?!
答案 0 :(得分:1)
你几乎做对了。唯一的问题是belongs_to
使用单数,而不是复数。
你必须改变:
belongs_to :sniffs
要:
belongs_to :sniff
有了这个你应该能够:
lender = Lender.find(2)
lender.sniff.sniff_desc #=> "OK"