【问题标题】:Initialize Array of hashes using a struct使用结构初始化哈希数组
【发布时间】:2015-06-08 01:10:44
【问题描述】:

我收到一组参数 [config['events']],如下所示:

 [{"event"=>"loaded", "tags"=>["videjbajc_jbad"]}, {"event"=>"clicked"}, 
 {"event"=>"downloaded"}, {"url"=>"http://aintnothingbutarailsthing"}....}]

我正在尝试对每个哈希键运行验证,这应该是动态的,因为输入可能会改变,哈希键名称保持不变。

第一步 - 调用 events 方法来映射每个哈希数组:

   def valid?
        @errors = []
        @errors << 'Please check events unless self.events.all?(&:valid?)
        @errors.empty?
   end

第二步 - 运行映射到我的事件类

   def events
         @events ||= (config['events'] || []).map { |e| Event.create(e) }
   end

最后一步 - 接收数据数组对象并进行初始化和验证

  class Event < Struct.new(
                        :event,
                        :link_type,
                        :url,
                        :media_id,
                        ....  
                      )

   def self.create(data)
      self.new(     
            data['event'],
            data['link_type'],
            data['url'],
            data['media_id'],
            ...
          )
     end

      validates :event, :presence => true
      validates :url, :allow_nil => true, :format => /https:/
      .. and so on and so forth.. :-)
 end

问题:不确定我在这里做错了什么。我只能初始化事件键。在 self.create(data) #{data.inspect} 之后加薪将返回

       {"event"=>"loaded", "tags"=>["amex_video_q3_delivered"]}

:event 可以验证,但标签不会,其他所有东西也一样.. :-(

请指教:-)

【问题讨论】:

  • 你的问题到底是什么?
  • 如何使用上述结构正确初始化我的哈希数组?

标签: ruby arrays ruby-on-rails-3 hash


【解决方案1】:

我想通了。当传递我的参数数组时,我必须考虑每个可能的键值对条件。

我是这样初始化的:

            data['event'],
            data['tags'] ? data['tags'] : nil,
            data['link_type'],
            data['url'],
            data['media_id'],
            data['ad_placement'] ? data['ad_placement'] : nil,
            data['points'] ? data['points'].to_i : nil,
            data['award'] ? data['award'] : nil,               
            data['points_tag'] ? data ['points_tag'] : nil,
            data['track'] ? data['track'] : nil,
            data['checkin_completed_ttl'] ? data['checkin_completed_ttl'] : nil

确保期望某些键的值为 nil。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2012-03-20
    • 2016-10-24
    相关资源
    最近更新 更多