ruby-on-rails - 声明 Rails 模型子类的静态属性

标签 ruby-on-rails ruby sti

我是 Ruby 和 Rails(以及编程!)的新手,并试图找出将属性从模型传递到其 STI 子项的惯用方法。

我有一个通用模型“Document”,以及一些从它继承的模型 - 让我们以“Tutorial”为例。我有一个“图标”的字符串字段,我想在其中存储图标的文件名但不是完整路径(我认为路径应该取决于每个模型,因为它是检索记录数据的详细信息?):

class Document < ActiveRecord::Base
  attr_accessible :title, :body, :icon

  @@asset_domain = "http://assets.example.com/"
  @@asset_path = "documents/"

  def icon
    @@asset_domain.to_s + @@asset_path.to_s + read_attribute(:icon).to_s
  end
end

这就是我想对子类做的事情,因此他们在适当的位置寻找他们的“图标”(或任何其他 Assets )。

class Tutorial < Document
  attr_accessible :title, :body, :icon

  @@asset_path = "tutorials/"

  # Other tutorial-only stuff
end

我已经阅读了有关类变量的内容,并理解了为什么我上面写的内容没有按照我的预期工作,但是在教程类中覆盖“asset_path”的最佳方法是什么?我认为我不应该使用实例变量,因为不需要根据模型的每个实例更改值。非常感谢任何想法(即使这意味着重新思考!)

最佳答案

看起来您正在尝试创建一个可以重用来构建路径的常量值。我不会使用类变量,而是使用常量。

现在是放置问题:

类内

如果它确实只需要在 Document 和继承它的类中使用,请在堆栈顶部定义一个常量:

# document.rb
#
class Document < ActiveRecord::Base
  attr_accessible :title, :body, :icon

  ASSET_DOMAIN = "http://assets.example.com/"

end

这可以在 Document Tutorial 以及从这些对象继承的其他对象中访问。

环境.rb

如果这是您要到处使用的值,那么向您的environment.rb添加一个常量怎么样?这样您就不必记住在放置它的所有类中重新定义它。

# environment.rb
#
# other config info
#
ASSET_DOMAIN = "http://assets.example.com/"

然后您可以在任何您喜欢的地方建立链接,而不受类别的限制:

# documents.rb
#
icon_path = ASSET_DOMAIN + path_and_file

# tutorial.rb
#
icon_path = ASSET_DOMAIN + path_and_file

# non_document_model.rb
#
icon_path = ASSET_DOMAIN + path_and_file

这可能是社论,但 ruby 爱好者在看到 @@ 时似乎感到畏缩。有时间和地点,但对于您想做的事情,我会使用一个常量并决定您需要将其放置在哪里。

关于ruby-on-rails - 声明 Rails 模型子类的静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10438647/

相关文章:

ruby-on-rails - 什么是业务逻辑?

html - 在 f.label 中嵌套输入(rails 表单生成)

ruby-on-rails - Ruby/Rails - 文件命名约定和处理大写模型名称(即 CSV 与 Csv)

ruby - 使 Ruby 循环返回 "x"图像而不是整数 x

ruby-on-rails - Rails STI 类自动初始化

ruby-on-rails - 我可以将 ActiveRecord 关系与 Hstore 中的字段一起使用吗?

javascript - Rails 嵌套属性与 Ckeditor 和 Cocoon 附加富文本编辑器不显示

javascript - Rails 浏览器语法高亮插件?

ruby - TextMate 中的 ⌃⇧H 到 'Tidy' HTML 导致 NoMethodError

ruby-on-rails - 使用具有连接条件的 Rails STI 模型