2015-12-15 70 views
0

我已经完全设计的数据库工作得很好,显示来自数据库和所有东西的数据。 相机数据库中有一个选项“is_online”Rails - 绑定功能与模型实例

我把它变成<%= camera.is_online %>。 我想要做的就是绑定一个函数与这个,它会着色,基本上是和否,如果它是的,它将是绿色的,如果它的否,它将是红色的。 问题。凡定义这种方法,它将提供给这对相机/ _camera视图 所以我可以做类似<%= camera.is_online.color %> PS:我看到一个字装饰相同,我结合。颜色

回答

0

最简单的方法是创建一个实例方法:

#app/models/camera.rb 
class Camera < ActiveRecord::Base 
    def color 
     is_online? ? "green" : "red" 
    end 
end 

这允许您拨打:

@camera.color 

你可以使用一个translator,因为发现我已经不得不与custom method(否则它会非常凌乱)连接使用:

#Gemfile 
gem "human_attribute_values" 

#View 
<%= camera.human_attribute_values(:is_online) %> 

#config/locales/en.yml 
en: 
    activerecord: 
    values: 
     camera: 
     is_online: 
      'true': "green" 
      'false': "red" 

这是更久一点比我想象的更快,但它是实现你所需要的一种方式。


另一种选择,因为你所提到的,就是用decorators,基本上允许您创建依赖于该值的当前属性自定义属性:

#Gemfile 
gem 'draper', '~> 1.3' 

#app/decorators/camera_decorator.rb 
class CameraDecorator < Draper::Decorator 
    def color 
    object.is_online? ? "green" : "red" 
    end 
end 

#app/controllers/cameras_controller.rb 
class CamerasController < ApplicationController 
    def show 
     @camera = Camera.find(params[:id]).decorate 
    end 
end 

诚实,这可能比这样做更麻烦。

0

Rails视图助手看是你的答案这里。

在app /佣工/ application_helper.rb

def colourize text 
    colour = (text == "yes" ? "green" : "dark gray") 
    content_tag span, text, style: "color: #{colour}" 
end 

然后在您的视图使用

<%= colourize camera.is_online %>