我试图用rails 5.1构建一个帮助器。
我需要:
<div class="card-sleep-body-price">
<span>à partir de</span>
<p>45.53€</
</div>
我试着建立:
def sleep_price(poi)
if !poi.tariffs.blank?
tag.div class: 'card-sleep-body-price' do
<span>à partir de</span>
<p>poi.poitable.tariffs.first.price '€'</p>
end
end
end
我该如何解决?
这是一种方式。修改你的代码使用引号和字符串插值让Ruby知道什么是文字和什么是代码。
def sleep_price(poi)
"<span>à partir de</span><p>#{poi.poitable.tariffs.first.price}€</p>"
end
但是,因为在帮助器或视图中使用长连接点符号被视为不良形式,所以请考虑在模型中执行此逻辑:
class Poi < ActiveRecord::Base
belongs_to :poitable
def price
self.poitable.tariffs.first.price
end
end
从视图中,您可以按如下方式调用此方法:
<%= sleep_price(match.sleep) %>
或者,您可以从控制器调用match.sleep
,也许可以从视图中设置一个实例变量。
帮手可能看起来像:
def sleep_price(price)
"<span>à partir de</span><p>#{price}€</p>"
end
嗨Ben你可以使用Rails content_tag
助手来构建html元素。
view helper
def generate_price(label:,price:,class:“element-class”)
content_tag:div,class:class do
concat(content_tag(:span,label))
concat(content_tag(:p,price))
结束
结束
用法:
<%= generate_price(label: à partir de, price: 45.53€)%>
<div class="element-class"><span>à partir de</span><p>45.53€</p></div>
嵌套content_tag:https://robots.thoughtbot.com/nesting-content-tag-in-rails-3
content_tag:https://apidock.com/rails/ActionView/Helpers/TagHelper/content_tag
希望这可以帮助