我不得不圍繞舊式PostgreSQL數據庫構建Rails應用程序,該數據庫不符合「Rails方式」,因爲多個方法是不可能的 - 我是不知道這是什麼讓我絆倒或讓我絆倒是因爲我已經離開Rails太多個月了。ActiveRecord關聯方法不被添加到模型中
根據Rails指南,當您在模型上聲明belongs_to時,將向該模型的每個實例添加四個方法。在Guide示例中,在Order表上添加belongs_to:customer添加:customer,customer =,build_customer和create_customer。
我在我的檢查中沒有看到。我做錯了什麼或錯過了一步?
我的兩個表如下所示:
class Zzaddress < ActiveRecord::Base
set_table_name 'zzaddress'
has_many :zzpersons, :class_name => 'Zzperson'
end
class Zzperson < ActiveRecord::Base
set_table_name 'zzperson'
belongs_to :zzaddress, :class_name => 'Zzaddress', :foreign_key => "zzaddress_id"
end
現在,如果我檢索這類地址:
myaddr = Zzaddress.where(:id => 972)
我得到的結果早在我預料。
當我試圖訪問分配給該地址的任何人,像這樣的:
myaddr.zzpersons
我得到心愛的
NoMethodError: undefined method `zzpersons' for #<ActiveRecord::Relation:0x103c015d0>
果然,如果我看的模型的方法,它不在那裏:
myaddr.methods.sort
發現了很多方法,並沒有什麼太多的zz範圍;-)
如果我這樣做,沒有協會它的作品,你會想到:
grp = Zzperson.where(:zzaddress_id => 972)
=> [#<Zzperson id: 1347, ....>, #<Zzperson id: 1349, ...>, #<Zzperson id: 1968, ...>]
的教訓,從很久以前就學會在編輯之間退出軌控制檯的模型文件,這是我繼續堅持。有沒有辦法從控制檯內檢查模型定義?我也記得重新加載!命令,但可能會暗示自己並不總是工作?
這是軌3.2.11(全新安裝,所以一切應該是最新的),以及在3.2.11積極記錄等。對於它的價值,PostgreSQL寶石是pg(0.14.1)。 PostgreSQL的版本是9.1.4。
而且爲了完整起見,schema.rb被耙創建:模式:轉儲,它看起來有效的對我說:
create_table "zzaddress", :id => false, :force => true do |t|
t.integer "id", :null => false
<snip>
end
create_table "zzperson", :id => false, :force => true do |t|
t.integer "id", :null => false
t.integer "zzaddress_id", :default => 0, :null => false
<snip>
end
報表文件pg_dump生成的SQL顯示了表的創建預期:
CREATE TABLE zzaddress (
id integer NOT NULL,
etc.
);
CREATE TABLE zzperson (
id integer NOT NULL,
zzaddress_id integer DEFAULT 0 NOT NULL,
etc.
);
經過下面Scott的建議,我在玩這個,我真的很困惑,因爲在我看來,我可以告訴erb以正常方式顯示字段,但是在控制檯中,米獲得任何領域,更少的AR關係,是「缺少方法」 – tobinjim