Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 不带表的Rails模型_Ruby_Ruby On Rails 3_Model - Fatal编程技术网

Ruby 不带表的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

我想为lets say颜色创建一个选择列表,但不想为颜色创建一个表。我在任何地方都看过,但在谷歌上找不到

我的问题是:在没有数据库表的情况下,如何在模型中放置颜色

还是有更好的rails方法


我见过有人直接在模型中放入数组或散列,但现在我找不到它。

最简单的答案就是不要从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