Rails条件选择内容

时间:2016-05-25 21:22:19

标签: ruby-on-rails ruby

我在表单中动态填充选择标记。 select标记由Payee的查询填充。我有几个字段,我想显示为元素的文本值。但是必须有条件地完成。例如。

字段:

:company
:first_name
:last_name

我可以在文本框中连接这三个,如下所示:

f.select :payee_id, Payee.all.collect { |p| [p.company.to_s + " " + p.first_name.to_s + " " + p.last_name.to_s, p.id] }

以上不符合我的要求。如果company存在,我想省略first_namelast_name

如果company为空,我只想显示first_namelast_name

目前如果存在companyfirst_name,它会将两者连接在一起,这是我不想要的。

我知道如何分别查询每个案例的数据库,但我不知道如何组合结果,因此select标签将正确显示。

到目前为止,这是我的助手。我知道它现在很乱,但我需要帮助理解这个方法才能完成。

def expense_payee_id_field(f)
  @payee_with_company = Payee.where("company IS NOT NULL and company !='' ")
  @payee_without_company = Payee.where("(first_name != '' or last_name != '') and company = '' ")

  f.select :payee_id, Payee.all.collect { |p| [p.company.to_s + " " + p.first_name.to_s + " " + p.last_name.to_s, p.id] }
end

1 个答案:

答案 0 :(得分:2)

您应该在Payee模型中创建一个为您执行此逻辑的方法:

# Payee.rb

# I've extracted this into its own method
# because you very well may need it later
def full_name
  [first_name, last_name].join(" ")
end

# This can be written more concisely, but I've
# kept it as-is to allow for better readability
def display_name
  if company_name.blank?
    full_name
  else
    company_name
  end
end

现在,您只需拨打payee.display_name即可打印所需的结果。