带有rails 5.1的帮助程序中的html

问题描述 投票:-2回答:2

我试图用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-on-rails helper
2个回答
1
投票

这是一种方式。修改你的代码使用引号和字符串插值让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

0
投票

嗨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

希望这可以帮助

© www.soinside.com 2019 - 2024. All rights reserved.