Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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 on rails Rails中的模型关联具有类名称_Ruby On Rails_Database_Activerecord_Database Design_Rails Activerecord - Fatal编程技术网

Ruby on rails Rails中的模型关联具有类名称

Ruby on rails Rails中的模型关联具有类名称,ruby-on-rails,database,activerecord,database-design,rails-activerecord,Ruby On Rails,Database,Activerecord,Database Design,Rails Activerecord,我正试图找到一种优化的方法来建模我的数据库。 背景: 我目前有两个rails模型,一个叫做Environment,另一个叫做StatusUpdate 我有一个程序,它位于不同的服务器上,为环境提交状态更新。这些更新包含关于环境的四条信息 我有一个显示所有环境的索引屏幕。(模型如下) 我的目标是向用户显示有关环境的最新状态更新的所有信息。 我存储十个最新的状态更新,任何>10的内容都会在收到新的更新后被删除 基本索引布局 --环境1--状态字段1--状态字段2--状态字段3--状态字段4-

我正试图找到一种优化的方法来建模我的数据库。
背景:

  • 我目前有两个rails模型,一个叫做
    Environment
    ,另一个叫做
    StatusUpdate

  • 我有一个程序,它位于不同的服务器上,为
    环境提交
    状态更新。这些更新包含关于环境的四条信息

  • 我有一个显示所有
    环境的索引屏幕
    。(模型如下)

    • 我的目标是向用户显示有关环境的最新状态更新的所有信息。
  • 我存储十个最新的
    状态更新
    ,任何>10的内容都会在收到新的更新后被删除

基本索引布局
--环境1--状态字段1--状态字段2--状态字段3--状态字段4--
--环境2--状态字段1--状态字段2--状态字段3--状态字段4--
--环境3--状态字段1--状态字段2--状态字段3--状态字段4--
--环境4--状态字段1--状态字段2--状态字段3--状态字段4--

当前模式

Environment(name):has_many StatusUpdates
StatusUpdate(field1, field2, field3, field4): belongs_to Environment    
环境控制器

def index
    @environments = Environment.paginate(page: params[:page])
end
然后,我使用局部渲染来渲染
@environments

问题
当前模式似乎合适,但我怀疑在执行索引函数期间,我必须在EnvironmentsController中对数据库进行额外调用。我是否将
环境
模式更改为包含字段1-4?或者,在从数据库中检索每个环境的最新状态更新时,是否有方法执行
Environment.paginate

H-man的建议听起来很完美,但我不明白为什么我在我的模型中收到了一个意外的tLabel错误,与他推荐的has_one关联。供参考:

class Environment < ActiveRecord::Base
    has_many: status_updates
    has_one: current_status, -> { order: 'created_at DESC' }, class_name: 'StatusUpdate'
end
类环境{order:'created_at DESC'},类名称:'StatusUpdate'
结束
Rails 4.0.2

class Environment < ActiveRecord::Base
  has_many :status_updates
  has_one :current_status, -> {order 'created_at DESC'}, class_name: 'StatusUpdate'
end
这将一次性加载所有环境的当前状态更新。我假设您使用的是Rails 4,因为您没有提到版本。如果您使用的是旧版本的rails,请改用此版本:

  has_one :current_status, class_name: 'StatusUpdate', order: 'created_at DESC'

对于第一个代码块,我注意到您使用的是
def-Environment…
,而不是
class-Environment…
,这是有目的的还是仅仅是一个输入错误?我怀疑是后者,但我遇到了一个错误,希望确保=]当前获得错误
意外的tLABEL
,并且代码引用模型中的has_one关联<代码>有一个:当前状态,->{order:'created_at DESC'},类名:'StatusUpdate'
还有Rails 4.0.2Sorry,这是一个打字错误。它应该是
类环境
。修好了,不用担心!虽然我在几个小时前把它放进了我的模型中,并仔细考虑了我所有的代码。这是您编写的内容,我用Rails API进行了验证。我仍然在has_one关联行上遇到意外的tLabel错误。有什么想法吗?我需要某种形式的迁移吗?啊。。另一个输入错误:(应该是:
有一个:当前状态,->{order'created\u at DESC},类名:'StatusUpdate'
Ha!每次冒号都能找到我;)谢谢,这太完美了!Rails太酷了!
  has_one :current_status, class_name: 'StatusUpdate', order: 'created_at DESC'