2015-12-15 51 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 %>