我收到的参数数组[config ['events']]如下所示:
[{"event"=>"loaded", "tags"=>["videjbajc_jbad"]}, {"event"=>"clicked"},
{"event"=>"downloaded"}, {"url"=>"http://aintnothingbutarailsthing"}....}]
我正在尝试对每个哈希键运行验证,这应该是动态的,因为输入可能会改变,哈希键名保持不变。
第一步 - 调用事件方法来映射每个哈希数组:
def valid?
@errors = []
@errors << 'Please check events unless self.events.all?(&:valid?)
@errors.empty?
end
第二步 - 将地图运行到我的Events类
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.inspect}之后加注
{"event"=>"loaded", "tags"=>["amex_video_q3_delivered"]}
:事件将验证好,但标签不会和其他一切......: - (
请告知: - )
答案 0 :(得分: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
确保某些键的值为零。