2010-03-29 67 views
0

我正在開發一個Rails 1.0應用程序(我不能升級,這是一個奇怪的情況),我試圖使用:composed_of功能。我有一類叫的StreetAddress:Rails 1.0 - 使用composed_of給了我錯誤的參數數量(1爲5)錯誤

class StreetAddress 
    attr_reader :address, :address2, :city, :state_id, :zip_code 

    def initialize(address, address2, city, state_id, zip_code) 
    @address = address 
    @address2 = address2 
    @city = city 
    @state_id = state_id 
    @zip_code = zip_code 
    end 


end 

,並具有列的模型類叫酒店

class Hotel < ActiveRecord::Base 
    composed_of :street_address 
    # ... 

end 

:當我嘗試訪問我得到一個錯誤聚集

"id", "brand_id", "code", "location_name", "address", "address2", "city", "state_id", "zip_code", "phone_number", "phone_ext", "fax_number", "time_zone", "url", "room_service_email", "manager_name", "manager_email" 

然而:

>> h = Hotel.find(1) 
=> #<Hotel:0x38ad718 @attributes={"fax_number"=>"1-623-420-0124", "city"=>"Twin 
Falls", "address2"=>"285", "brand_id"=>"1", "code"=>"XZWUXUSZ", "manager_email"= 
>"[email protected]", "url"=>"http://www.xycdkzolukfvu.hom", "ph 
one_number"=>"1-805-706-9995", "zip_code"=>"72436", "phone_ext"=>"48060", "id"=> 
"1", "manager_name"=>"Igor Mcdowell", "room_service_email"=>"[email protected] 
ae.ca", "time_zone"=>"America/Boise", "state_id"=>"15", "address"=>"P.O. Box 457 
, 7405 Dignissim Avenue", "location_name"=>"penatibus et magnis"}> 
>> h.street_address 
ArgumentError: wrong number of arguments (1 for 5) 
    from (eval):3:in `initialize' 
    from (eval):3:in `new' 
    from (eval):3:in `street_address' 
    from (irb):6 

爲什麼?

回答

2

composed_of將嘗試使用所知道的字段調用該對象的構造函數。在你的情況下,它只發送street_address屬性(這似乎不存在,所以可能是零)。確保使用映射屬性集來聲明您的copied_of,以便它將發送所有屬性。

composed_of :street_address, :mapping => [%w(address address), %w(address2 address2), %w(city city), %w(state_id state_id), %w(zip_code zip_code) 
+0

工作,但它確實似乎反對軌道的「約定配置」的理念。謝謝! – 2010-03-30 01:18:07

相關問題