仅当条件为真时才将选项传递给方法。优雅?

时间:2010-11-19 18:20:02

标签: ruby-on-rails ruby conditional haml

我有一个部分根据模型的属性类型在我的表单中插入适当的输入。我传递了一个属性名称数组,我的部分放置了一个form.text_field,其中属性是一个字符串,当一个属性是一个整数时,我还有一个form.select(我也有办法找到与属性相关的文本值集合)等等与datetime,等等。

问题是部分需要尽可能通用,所以我想检查是否有params [:search] [:attr_name]来设置默认值,如果没有它,我使用默认调用,它在表单中设置模型的值。

当然,我可以这样做(我使用HAML)工作:

- if search_param(field)
  = form.text_field field, :value => search_param(field)
- else
  = form.text_field field

但它真的很难看。只有在条件为真时,才有办法将选项传递给方法。这样的事情。

= form.text_field field, (:value => search_param(field) ) if search_param(field)

我也尝试过:

= form.text_field field, :value => search_param(field) || field.to_sym

但它在输入

中显示“field”

想法?

2 个答案:

答案 0 :(得分:0)

我不确定这是否是您想要的结果,但是如果您使用model.send(字段)来从模型中获取属性值,那么该怎么做呢?所以它会是这样的:

= form.text_field field, :value => ( search_param(field) || model.send(field) )

答案 1 :(得分:0)

这是使用三元运算符的一种方法:

form.text_field *([field] + (search_param(field) ? [:value => search_param(field)] : []))