.to_xml с ruby ​​1.8.7 (ree) и rails 3.1.3 сгенерировать ошибку? - PullRequest
0 голосов
/ 07 марта 2012

Итак, я пытаюсь реализовать хорошую концепцию метаданных в своем приложении.По сути, я храню некоторые детали в формате XML в одном столбце в базе данных, но в моем приложении я могу получить к ним доступ через хэш.

def extra_info=(data)
    data = {} unless data.is_a?(Hash)
    self[:extra_info] = data.to_xml(:dasherize => false)
end

def extra_info
   Hash.from_xml(self[:extra_info])['hash']
end

Довольно просто, следуя тому, что я прочитал в блогеsubject.

Однако теперь мое приложение выдает ошибку:

ERROR ArgumentError: wrong number of arguments (1 for 0)
.../app/models/users/usage.rb:35:in to_xml

Итак, я попробовал это

def extra_info=(data)
    data = {} unless data.is_a?(Hash)
    self[:extra_info] = data.to_xml
end

И все же я получаю ту же ошибку!Кто-нибудь сталкивался с этой проблемой?Что не так?

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Оказывается, это была проблема обратной совместимости с версией компоновщика, включенной в Rails. Проблема только с РЗЭ.

Из elisehuard на github:

в Ruby 1.8.7 арность метода to_xs равна 0 - в 1.9.2 требуется кодировка

Уголовная. В любом случае, большое спасибо ей за исправление, которое можно найти здесь .

0 голосов
/ 08 марта 2012

Вы должны использовать * read_attribute * и * write_attribute *

Пример:

def ip 
  # ip is stored as a number, convert the number to a human readable IP address (i.e. 192.168.1.1)
 IPAddr.new(read_attribute(:ip) , Socket::AF_INET).to_s    
end

def ip=(val)
   # ip is stored as a number, convert a human readable ip (i.e. 192.168.1.1) to a number
   write_attribute(:ip, IPAddr.new(val).to_i)
end
...