【发布时间】:2012-05-22 17:53:01
【问题描述】:
所以我有这段代码:
= f.input :aspectRatioId, :label => 'Aspect Ratio',
:input_html => { :id => 'dvd_aspectRatio_tokens', :data => { :load => [@dvd.aspectRatio] } }
当在关联中找不到任何内容时,我想创建一个空数组。现在,当没有找到任何东西时,它会返回 [null],这会导致需要 [] 的 tokeninoput javascript 出错
我可以通过创建另一个这样的方法来做到这一点:
def self.series_without_empty_values(dvd)
series = [dvd.dvd_series]
if series[0].nil?
series = []
end
return series
end
但我宁愿在表单上的:load => 调用中执行此操作。这甚至可能吗?
【问题讨论】:
-
你可以试试
:load => [@dvd.aspectRatio] || []。不确定这是否可行。 -
@HunterMcMillen:不,这行不通,
[nil]是真的,甚至[]在 Ruby 中也是真的。 @kaukebie,写那个条件的方式很奇怪:-)即使Ruby没有Array#compact,你也可以简单地写:dvd.dvd_series ? [dvd.dvd_series] : []。 -
几乎没有必要对将要定义或未定义的对象调用
.nil?。为简单起见,请改用if (!series[0])或unless (series[0])。但是,如答案中所述,compact是解决此问题的方法。 -
@HunterMcMillen 那行不通,我试过了。 @tokland:ol' 三元运算符,我喜欢它,但它不起作用,因为 dvd.dvd_series 不会导致 false 除非我做类似我在那里所做的事情:
series[0].nil?其他任何东西都不会返回空数组。 -
@tadman:我实际上认为
if series[0].nil?比(!series[0])更具可读性。我总是想念那些!:) 感谢所有的建议,这就是这个网站的全部内容。
标签: ruby arrays activerecord ruby-on-rails-3.1 simple-form