SORU
5 Kasım 2010, Cuma


Global sabitleri tanımlamak için Nerede?Ruby on Rails:

Sadece Raylar üzerinde Ruby benim ilk web uygulaması ile başladım. Farklı bir sürü model, görünüm, kontrol ve benzeri var.

Benim tüm uygulama genelinde geçerli olan, gerçek anlamda küresel sabitleri tanımlar, sopa için iyi bir yer bulmak istiyorum. Özellikle, kararları kendi görüşlerimi alınan modellerim mantığı hem de geçerlidir. Hiç KURU yer mevcut hem de gittiklerini bu tanımlar koymak bulmaktümbenim model ve aynı zamanda tüm görüşlerimi.

Spesifik bir örnek vermek gerekirse, COLOURS = ['white', 'blue', 'black', 'red', 'green'] Sabit istiyorum. Bu iki model ve görünümlerde her yerde kullanılır. Nerede erişilebilir bir yerde tanımlayabilir miyim?

Denedim ne var:

  • Modeli sürekli sınıf değişkenleri.en ilişkili olduklarını rb dosyası @@COLOURS = [...] gibi. Ama benim görüşlerim Card.COLOURS yerine bir şey Card.first.COLOURS gibi kludgy yazabilirim ki onu tanımlamak için mantıklı bir yol bulamadım.
  • Modeli, def colours ['white',...] end - aynı sorunu gibi bir şey bir yöntem.
  • Application_helper bir yöntem.rb - bu şimdiye kadar yaptığım şey bu, ama çokta modelleri görünümleri, sadece erişilebilir
  • Uygulamada bir şey denemiş olabilirim.rb ya da çevre.rb, ama bu gerçekten doğru (ve ya iş gibi görünmüyor) görünmüyor

Sadece görünümleri modelleri ve erişilebilir olması için her şeyi tanımlamak için bir yolu var mı? , Modelleri ve görünümleri ayrı olması gerektiğini biliyorum, ama bazı alanlarda mutlaka etki alanına özgü aynı bilgisine başvurmak için gereken zamanlar olacak yani?

CEVAP
5 Kasım 2010, Cuma


Eğer modeliniz gerçekten "sabitler onları. devam etmelisin" sorumlu ise Sınıf yöntemleri onlara erişmek için yeni bir nesne örneği oluşturmadan oluşturabilirsiniz:

class Card < ActiveRecord::Base
  def self.colours
    ['white', 'blue']
  end
end

# accessible like this
Card.colours

Alternatif olarak, sınıf değişkenleri ve bir erişimci oluşturabilirsiniz. Bu sınıf değişkenleri biraz miras ile şaşırtıcı ve çok iplik ortamlarda hareket olabilir, ancak önerilmez.

class Card < ActiveRecord::Base
  @@colours = ['white', 'blue']
  cattr_reader :colours
end
# accessible the same as above

Ayrıca aşağıdaki örnekte olduğu gibi bir başlatıcı olarak her yerden erişilebilir gerçek sabitler oluşturabilirsiniz. Bu renkleri çok geneldir ve birden fazla model kapsamında kullanılan muhtemelen en iyi yer.

# put this into config/initializers/my_constants.rb
COLOURS = ['white', 'blue']

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chickenby

    chickenby

    2 HAZİRAN 2008
  • Droid Life

    Droid Life

    17 Kasım 2009
  • RFS Dan

    RFS Dan

    22 Temmuz 2014