如何根据Rails中的值更改HTML输出

时间:2013-11-26 07:09:22

标签: ruby-on-rails ruby activerecord

如果返回的数据库值是特定数字,我只想添加一个HTML类。这是我试过的:

<ul class="dog-sizes-list">
      <li <%= if given_size == 1 then puts "class='active'" end %>><img src="/assets/dogs/dog-icon.png" width="30px" /></li>
      <li <%= if given_size == 2 then puts "class='active'" end %>><img src="/assets/dogs/dog-icon.png" width="40px" /></li>
      <li <%= if given_size == 3 then puts "class='active'" end %>><img src="/assets/dogs/dog-icon.png" width="50px" /></li>
      <li <%= if given_size == 4 then puts "class='active'" end %>><img src="/assets/dogs/dog-icon.png" width="60px" /></li>   
</ul>

但是没有任何反应,也没有产生错误。此外,我在控制台中运行AR代码并返回正确的值。具体做法是:

given_size = Client.where(user_id: listing.client_id).first.dogsize

最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式获得所需的结果:

<li class="<%= "active" if given_size == 1 %>"></li>

如果您经常使用这种方法,可以将其提取为辅助方法。帮助程序可以放在application_helper.rb文件或其他合适的位置

def class_for_thing(thing)
  if thing == whatever
    "blah"
  else
    "not-blah"
end

答案 1 :(得分:0)

没有“活动”条件,因为根据您的代码,所有项目都处于活动状态。

您似乎只想根据给定的尺寸自定义图像大小。如果是这样,更好的方法是在演示者中以模型或更好的方式定义它。

class Dog < ActiveRecord::Base
  SIZE_AND_IMAGE = { '1': '30px', '2': '40px', '3': '50px', '4': '60px' }

  # Can fallback to a default size of 30px if no size given
  def image_size
    given_size ? SIZE_AND_IMAGE[given_size.to_s] : '30px'
  end
end

# In View
<ul class="dog-sizes-list">
  <li><img src="/assets/dogs/dog-icon.png" width="#{@dog.image_size}" /></li>