Rails 1.0 - Использование Comme_of дает мне неправильное количество аргументов (1 для 5) ошибка - PullRequest
0 голосов
/ 30 марта 2010

Я занимаюсь разработкой приложения на Rails 1.0 (не могу обновить, это странная ситуация), для которого я пытаюсь использовать функциональность У меня есть класс под названием StreetAddress:

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 

и модельный класс под названием Hotel

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"=
>"molestie.tellus.Aenean@erosnec.ca", "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"=>"Duis.risus@Donecvit
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

Почему?

1 Ответ

2 голосов
/ 30 марта 2010

mixed_of попытается вызвать конструктор объекта с полями, о которых он знает. В вашем случае это только отправка атрибута street_address (который, кажется, не существует, поэтому, вероятно, будет нулевым). Обязательно объявите свой compo_of с установленным атрибутом mapping, чтобы он отправлял все атрибуты.

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