Ruby on rails Rails地址格式助手
我正在尝试创建一个助手,它将从5列(add1、add2、add3、add4、add5)格式化一个地址,以便压缩任何空值并显示在屏幕上Ruby on rails Rails地址格式助手,ruby-on-rails,ruby,street-address,Ruby On Rails,Ruby,Street Address,我正在尝试创建一个助手,它将从5列(add1、add2、add3、add4、add5)格式化一个地址,以便压缩任何空值并显示在屏幕上 Add1, Add3, Add4, Add5 (已跳过添加2,因为它为空) 我创建了以下帮助程序来汇编和跳过任何空值,但我不能引入新的换行符。有什么想法吗 def delivery_address(customer) @customer = Customer.find(customer.id) if @customer.del_address1.blank
Add1,
Add3,
Add4,
Add5
(已跳过添加2,因为它为空)
我创建了以下帮助程序来汇编和跳过任何空值,但我不能引入新的换行符。有什么想法吗
def delivery_address(customer)
@customer = Customer.find(customer.id)
if @customer.del_address1.blank?
deladdress = "No Delivery Address"
else
deladdress = @customer.del_address1
deladdress = deladdress + "</br>"
if customer.del_address2.blank?
else
deladdress = deladdress + @customer.del_address2 + ","
end
if @customer.del_address3.blank?
else
deladdress = deladdress + @customer.del_address3 + ","
end
if @customer.del_address4.blank?
else
deladdress = deladdress + @customer.del_address4 + ","
end
if @customer.del_address5.blank?
else
deladdress = deladdress + @customer.del_address5
end
end
end
def交付地址(客户)
@customer=customer.find(customer.id)
如果@customer.del_address1.blank?
deladdress=“无送货地址”
其他的
deladdress=@customer.del_address 1
deladdress=deladdress+“”
如果customer.del_address2.blank?
其他的
deladdress=deladdress+@customer.del_address2+“,”
结束
如果@customer.del_address3.blank?
其他的
deladdress=deladdress+@customer.del_address3+“,”
结束
如果@customer.del_address4.blank?
其他的
deladdress=deladdress+@customer.del_address4+”,“
结束
如果@customer.del_address5.blank?
其他的
deladdress=deladdress+@customer.del_address 5
结束
结束
结束
您可以将所有值放入一个数组,然后删除任何空白值,而不是编写5个if
语句
请注意,我在这里的代码是基于您的代码,但与您的问题所要求的不完全相同:
它将压缩任何空值
空字符串也被视为空白?
(但“”!=nil
)。所以这个方法也会跳过这些值
如果您只想忽略
nil
值,但保留空字符串,则将reject(&:blank?)
替换为compact
一条重要建议:不要在视图帮助器中执行任何数据库查询。这只能在控制器中完成。活动记录应该已经传递到helper函数中。所以这条线
@customer = Customer.find(customer.id)
可以删除
def delivery_address(customer)
# Use a guard clause, this reduces if nesting
return 'No Delivery Address' if customer.del_address1.blank?
# Collect all parts
parts = [customer.del_address1, customer.del_address2, customer.del_address3, customer.del_address4, customer.del_address5]
# Remove all empty parts.
# Using a bang method is lighter on memory allocation
# and will speed up performance.
parts.reject!(&:blank?)
parts.join('<br/>').html_safe
end
def交付地址(客户)
#使用guard子句,这会减少嵌套
如果customer.del_address1.blank,返回“无送达地址”?
#收集所有零件
部分=[customer.del_地址1、customer.del_地址2、customer.del_地址3、customer.del_地址4、customer.del_地址5]
#拆下所有空零件。
#使用bang方法在内存分配上更轻松
#并将加快性能。
零件。拒绝!(&:空白?)
parts.join(“
”).html\u safe
结束
什么是“引入新的换行符”?您能详细说明一下吗?添加换行符,例如或回车。@ChrisNash
和\n
是两件不同的事情。你想要哪个?请讲清楚。@tomLord我想知道哪一个会给我多行文字的地址块。我在我的助手身上试过这两种方法,但两种方法都没有成功。Obvs我的语法有误,因为你的函数是一个视图助手,一个
标记将是合适的。我准备用压缩而不是空白来创建一个aswer,以匹配OP要求的内容(空值),很好,谢谢Tom,但是在页面上显示的是Taylor Road 23Bradford
BD61BH@ChrisNash如上所述,您可以使用
.html\u safe
。如果没有问题的答案(即,在本例中,如何调用该方法?),我无法知道该解决方案是否完整:)谢谢,但在页面上,这只是在一行上显示地址的5行,而不是像我预期的那样拆分为多行。啊。我忘了打安全电话了。现在应该可以了,我刚刚重新加载了页面,地址很完美-这给我的心带来了欢乐谢谢!
def delivery_address(customer)
# Use a guard clause, this reduces if nesting
return 'No Delivery Address' if customer.del_address1.blank?
# Collect all parts
parts = [customer.del_address1, customer.del_address2, customer.del_address3, customer.del_address4, customer.del_address5]
# Remove all empty parts.
# Using a bang method is lighter on memory allocation
# and will speed up performance.
parts.reject!(&:blank?)
parts.join('<br/>').html_safe
end