我想创建一个选择列表,比如颜色,但不想为颜色创建表格。我在哪里看到过它,但在Google上找不到。
我的问题是:如何在没有数据库表的情况下将颜色放入模型中?
还是有更好的Rails方式来做这个?
我见过有人直接在模型中放置数组或哈希表,但现在我找不到了。
我的问题是:如何在没有数据库表的情况下将颜色放入模型中?
还是有更好的Rails方式来做这个?
我见过有人直接在模型中放置数组或哈希表,但现在我找不到了。
class Model
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :whatever
validates :whatever, :presence => true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
attr_accessor将创建您的属性,您将使用initialize()创建对象并设置属性。
方法persisted将告诉您与数据库没有链接。 您可以找到类似这样的示例: http://railscasts.com/episodes/219-active-model?language=en&view=asciicast 这将为您解释逻辑。
答案适用于2013年,但自Rails 4以来,ActiveRecord
的所有与数据库无关的特性都被提取到ActiveModel
中。此外,有一个很棒的官方指南可供参考。
您可以包含所需数量的模块,也可以只包含部分模块。
例如,您只需要include ActiveModel::Model
,就可以放弃这样一个initialize
方法:
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
只需使用:
attr_accessor :name, :age
belongs_to
。我想使用@filterModel.sector.name
并在模型中使用sector_id
。 - Chloeinclude ActiveModel::Model
allows also to avoid the cancan ArgumentError
: cancancan (3.0.0) lib/cancan/controller_resource_builder.rb:8:in
initialize'` - iGiandef Color [一些对象代码] end
就可以了。它只是一个普通的对象。 - Scott Sclass_inheritable_accessor
和self.columns
上出现了“未定义的方法”错误,针对的是MyModel(表不存在):Class
。 - Don Cheadle在Rails 6中对我有效的方法:
class MyClass
include ActiveModel::Model
attr_accessor :my_property
end
ActiveRecord
支持这一点:class ModelBase < ActiveRecord::Base
self.abstract_class = true
end
ModelBase.new
会引发NotImplementedError
异常。 - Masa SakanoActiveModel
已经是具有abstract_class
的ActiveRecord
所拥有的东西了。 - Itay Grudevstore_accessor
这样在ActiveRecord中定义的方法。在我的情况下,我想测试一些concerns,但不是通过测试我在其中包含模块的ActiveRecord对象,而是在测试文件中定义一个“虚拟”的或新的对象。这是不可能仅仅通过包含ActiveModel来实现的,因为concern使用了scope
和store_accessor
。 - chopi321ApplicationHelper
中定义一个方法来返回一个列表,例如: def my_color_list
[
"red",
"green",
"blue"
]
end
collection_select
只接受响应方法名称的模型。http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select - Chloeclass MyModel
include ActiveModel::Model
include ActiveModel::Attributes
attribute :title, :string
attribute :created_at, :datetime
end
attr_accessor
,因为它允许我将属性解析为数据类型。