所以这很好用,我只需要进行一些重构。我想要实现的是,获取当前记录的所有值,或者只是放入另一列(计算列,就像在SQL中一样),它将保存以"地址&开头的所有字段的所有值。 #34;
到目前为止,这就是我所拥有的。
感谢您的任何意见。另外,如果可能的话,不要发布实际的重构代码,但只是让我知道我应该阅读什么或只是提示。我更喜欢自己实现这个目标。再次感谢。
def address
"#{self[:address_street1]} #{self[:address_street2]} #{self[:address_city]} #{self[:address_state]} #{self[:address_zipcode]} #{self[:address_country]}"
end
答案 0 :(得分:0)
您无需使用self[:foo]
访问特定型号的foo
字段。如果这是数据库中的列,则在类本身的代码中,您可以使用foo
def print_foo
# not this
# puts self[:foo]
# use this instead
puts foo
end
所以,要简化你的地址
def address
[
address_street1,
address_street2,
address_city,
address_state,
address_zipcode,
address_country
].join(" ")
end
另一种方法是使用String#%
def address
%Q{
%s
%s
%s, %s %s
%s
} % [
address_street1,
address_street2,
address_city,
address_state,
address_zipcode,
address_country
]
end
这会产生类似
的输出123 Main St
Apt 456
Seattle, WA 98122
USA
但是,如果一个或多个地址组件为空,则可能需要将其删除。要做到这一点,你可以做这样的事情
def address
[
address_street1,
address_street2,
address_city,
address_state,
address_zipcode,
address_country
].reject(&:blank?).join(" ")
end
所有这些都说,我认为将地址分成他们自己的Address
模型并完全分开表可能会更好。这将为您提供更多的灵活性来管理您的地址和处理其他一些复杂性。如果您愿意,Address
模型可以处理所有格式,这意味着您不必使用所有这些地址逻辑来混淆您的(可推测的)User
模型。
更不用说,各种型号可能都有地址;不只是用户。例如,订单具有开票/送货地址,信用卡具有开票地址,用户可以有多个地址,或者用户甚至可以拥有自己的联系人,而他们管理的地址不是他们自己的。如果每个需要地址的资源必须直接在其数据库表中包含address_*
个字段,那么这将很快失去控制。