2012-03-07 2 views
0

Так что я пытаюсь реализовать в метаданных концепцию метаданных. В основном, я храню некоторые данные в формате XML в одном столбце базы данных, но в своем приложении я могу получить к ним доступ через хэш..to_xml с рубином 1.8.7 (ree) и рельсы 3.1.3 ошибка бросания?

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 

Скорее просто, следуя за тем, что я читал в блоге на эту тему.

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

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 

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

+0

Вы можете публиковать сообщения, которые вас интересуют 'data.inspect? – ScottJShea

+0

@ScottJShea: Ничего! Это в моем файле модели, поэтому я не могу запустить приложение или консоль или что-то еще !!! –

ответ

0

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

От elisehuard на GitHub:

in Ruby 1.8.7 arity of method to_xs is 0 - in 1.9.2 it takes encoding

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

0

Вы должны использовать * 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 
+0

Спасибо за ваш ответ, хотя это может быть альтернатива, я до сих пор не знаю, почему это не работает! –

+0

использовать атрибуты чтения и записи. вы попробовали? вы не можете ссылаться на self [: extra_info] в пределах тех же определений методов. либо измените имя своего метода, либо используйте чтение/запись. – Roger

Смежные вопросы