Ruby 不带表的Rails模型
我想为lets say颜色创建一个选择列表,但不想为颜色创建一个表。我在任何地方都看过,但在谷歌上找不到 我的问题是:在没有数据库表的情况下,如何在模型中放置颜色 还是有更好的rails方法Ruby 不带表的Rails模型,ruby,ruby-on-rails-3,model,Ruby,Ruby On Rails 3,Model,我想为lets say颜色创建一个选择列表,但不想为颜色创建一个表。我在任何地方都看过,但在谷歌上找不到 我的问题是:在没有数据库表的情况下,如何在模型中放置颜色 还是有更好的rails方法 我见过有人直接在模型中放入数组或散列,但现在我找不到它。最简单的答案就是不要从ActiveRecord::Base中生成子类。然后你就可以写你的目标代码了 如果您想拥有一个选择列表(它不会演变),您可以在ApplicationHelper中定义一个返回列表的方法,例如: def my_color_list
我见过有人直接在模型中放入数组或散列,但现在我找不到它。最简单的答案就是不要从ActiveRecord::Base中生成子类。然后你就可以写你的目标代码了 如果您想拥有一个选择列表(它不会演变),您可以在
ApplicationHelper
中定义一个返回列表的方法,例如:
def my_color_list
[
"red",
"green",
"blue"
]
end
attr_访问器将创建属性,您将使用initialize()和set attributes创建对象
持久化的方法将告诉您没有与数据库的链接。您可以找到如下示例:
这将解释您的逻辑。对于2013年,答案很好,但是因为Rails 4将
ActiveRecord
的所有与数据库无关的功能提取到ActiveModel
中。此外,还有一个很棒的例子
您可以包含任意多个模块,也可以包含任意少的模块
例如,您只需要
包含ActiveModel::Model
,就可以放弃这样的初始化
方法:
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
只需使用:
attr_accessor :name, :age
如果您需要一个没有关联表的模型是为了创建一个抽象类,那么real models继承自-
ActiveRecord
支持:
class ModelBase < ActiveRecord::Base
self.abstract_class = true
end
classmodelbase
在Rails 6中对我起作用的是:
class MyClass
include ActiveModel::Model
attr_accessor :my_property
end
我不需要验证。我只需要一个带有颜色的@colors变量,这样我就可以将它们放在我的选择列表表单帮助器中。然后文件color.rb将只具有
def color[some object code]end
。它变成了一个普通的老东西。哦,对不起,我只看到你一半的评论。如果这真的是你所需要的,你有没有想过使用常数?当然,假设你只是提供了一个静态的颜色列表。或者更好的是,一个带有你想要的颜色选择列表的部分,你可以在任何地方粘贴。好的,谢谢。我试试看。但是你知道我说的模特是什么意思吗?我哪儿都见过,但现在找不到。这家伙用数组或散列创建了一个没有表的模型。对不起,我不理解。除非您希望保留其他类似于表的行为,否则没有表的模型只是一个对象。添加数组或散列只是将其作为实例或类变量(此处解释)添加到对象中的问题。我想将其用于复杂的搜索筛选器表单,以保存表单值,但不会保存到数据库中。整洁,但它似乎不允许属于
。我想使用@filterModel.sector.name
并在模型中使用扇区id
。包括ActiveModel::model
还允许避免cancan参数错误
:CanCanCanCancan(3.0.0)lib/cancan/controller\u resource\u builder.rb:8:in
initialize'`是的,但是collection\u select
只接受响应方法名称的模型。注意:抽象类不能被实例化(Rails 6.0中的laest)ModelBase.new
将引发NotImplementedError
@MasaSakano它在Rails 6中也不需要ActiveModel
已经是ActiveRecord
与abstract_类
一样了。
class MyClass
include ActiveModel::Model
attr_accessor :my_property
end