条件类名和文本(Rails)

时间:2015-07-16 15:40:23

标签: css ruby-on-rails controller

我对Rails很陌生,并尝试了一些基本的东西,比如条件类。

在'节目' view我有一个元素可以根据库存可用性更改样式,但文本也会相应更改。

人们一直说控制器应该尽可能小,但在视图中放置这个条件也会让人感觉很脏。这真的是最好的方式吗?

电流控制器:

def show
  @tyre = Tyres::Tyre.find_by_id(params[:id])

  if @tyre.in_stock
    @availability = I18n.t("products.filter.other.in_stock")
    @availability_class = 'i-check-circle color--success'
  else
    @availability = I18n.t("products.filter.other.not_in_stock")
    @availability_class = 'i-cross-circle color--important'
  end
end

修改

控制器:

def show
  @tyre = Tyres::Tyre.find_by_id(params[:id])

  if @tyre.in_stock
    @availability_append = ".in_stock"
  else
    @availability_append = ".not_in_stock"
  end

  @availability = I18n.t("products.filter.other#{@availability_append}")
end

查看:

.xs-12.description__status
  %i{class: (@tyre.in_stock? ? 'i-check-circle color--success' : 'i-cross-circle color--important')}
  = @availability

1 个答案:

答案 0 :(得分:0)

您可以清除控制器 tyres_controller.rb(我猜)方法,

def show
 @tyre = Tyre.find(params[:id]) # I believe you have a model named 'tyre'
end

然后,tyres_helper.rb中会有一个名为myproject/app/helpers/的文件。将以下代码放在那里,

def tyre_availability(tyre)  # it'll return an array with two values, first one is class name, second one is localized value
  if tyre.in_stock
    return 'i-check-circle color--success', I18n.t("products.filter.other.in_stock")
  else 
    return 'i-cross-circle color--important', I18n.t("products.filter.other.not_in_stock")
  end
end

并且,在视图中,您可以使用

.xs-12.description__status
  %i{:class => tyre_availability(@tyre)[0]}
  = tyre_availability(@tyre)[1]