初始化程序破坏信息

时间:2011-06-12 01:53:56

标签: ruby-on-rails ruby rubygems

我有一个可变账单,我发送给哈希:

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
...

我能够在initialize函数内部进行监视,并且定义了键,但初始化程序始终生成一致的空对象。我使用rails 3.0.7,rubygems 1.6.2和ruby“ruby 1.9.2p180(2011-02-18修订版30909)[x86_64-darwin10.7.0]”。

2 个答案:

答案 0 :(得分:0)

您可能想尝试为这些字段添加attr_accessible。也许ruby / rails足够聪明,可以保护你免受自己的大规模任务。

答案 1 :(得分:0)

我找到了。 gem作者假设JSON.parse生成符号作为键。现在json gem生成字符串作为键。在下面添加to_sym可以使它工作。

instance_variable_set("@#{key}", value) if Bill.instance_methods.include? key.to_sym