Инициализатор, уничтожающий информацию - PullRequest
0 голосов
/ 12 июня 2011

У меня есть переменная накладная, которую я отправляю в хэш:

bill = Hash
 'number' -> 2017
 'bill_type' -> h
 'sponsor_id' -> 400004
 and 23 more keys

это передается инициализатору:

Bill.new (bill) и результатом является объект без данных:

# and Bill.new(bill).to_json = {}
module GovKit
  module OpenCongress
    class Bill < OpenCongressObject
      attr_accessor :bill_type, :id, :introduced, :last_speech, :last_vote_date, :last_vote_roll, :last_vote_where, :last_action, :number, :plain_language_summary, :session, :sponsor, :co_sponsors, :title_full_common, :status, :most_recent_actions, :bill_titles, :recent_blogs, :recent_news, :ident

      def initialize(params)
        params.each do |key, value|
          instance_variable_set("@#{key}", value) if Bill.instance_methods.include? key
        end      
      end
...

Я могу наблюдать внутри функции инициализации, и ключи определены, но инициализатор последовательно создает постоянно пустой объект. Я использую рельсы 3.0.7, rubygems 1.6.2 и ruby ​​"ruby 1.9.2p180 (2011-02-18 ревизия 30909) [x86_64-darwin10.7.0]".

Ответы [ 2 ]

0 голосов
/ 12 июня 2011

Я нашел это. Автор гема предположил, что JSON.parse создает символы, которые действуют как ключи. Теперь драгоценный камень json создает строки в качестве ключей. Добавление to_sym ниже заставляет его работать.

instance_variable_set("@#{key}", value) if Bill.instance_methods.include? key.to_sym
0 голосов
/ 12 июня 2011

Возможно, вы захотите попробовать добавить attr_accessible для этих полей. Возможно, ruby ​​/ rails достаточно умен, чтобы защитить вас от ваших собственных массовых заданий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...