Active Record返回ActiveRecord :: Relation而不是flat对象

时间:2015-12-25 15:06:12

标签: ruby-on-rails ruby activerecord

我正在建立一个求职申请网站。学生可以申请工作,学生有许多申请,这些申请中的每一个只有一个连接的职位。当我查询数据库时,ActiveRecord返回ActiveRecord::Relation,这是一个数组。我可以看看对象的属性,但我必须降低一个级别。

获取object[0]我必须这样做才能查看属性object[0].id, object[0].name

想要这样做object.id, object.name

这是我的疑问:

@application = Application.where(user_id: current_user.id, posting_id: @posting.id)

2 个答案:

答案 0 :(得分:2)

1)选择数组的第一个元素:

@application = Application.
  where(user_id: current_user.id, posting_id: @posting.id).
  first

2)您可以使用#find_by

@application = Application.
  find_by(user_id: current_user.id, posting_id: @posting.id) 

答案 1 :(得分:1)

让我回答你的问题

  

Active Record返回ActiveRecord :: Relation而不是flat对象

@application = Application.where(user_id: current_user.id, posting_id: @posting.id)
  • 此查询返回的内容类似于记录数组,但是如果 我们在其上调用class,我们会看到它实际上是一个实例 ActiveRecord::Relation

<强> @application.class => ActiveRecord::Relation

关系类 - Railscasts Episodes-239

  

让查询返回一个ActiveRecord :: Relation对象允许我们   链查询在一起,这个Relation类是它的核心   新的查询语法。让我们通过搜索来看看这个课程   名为relation.rb。

的文件的ActiveRecord源代码      

在类的顶部定义了一些常量,其中一个   这是一个结构。如果你不熟悉结构,这是一种方法   通过传入列表来动态快速定义类   构造函数中的属性。

require 'active_support/core_ext/object/blank'

module ActiveRecord
  # = Active Record Relation
  class Relation
    JoinOperation = Struct.new(:relation, :join_class, :on)
    ASSOCIATION_METHODS = [:includes, :eager_load, :preload]
    MULTI_VALUE_METHODS = [:select, :group, :order, :joins, :where, :having]
    SINGLE_VALUE_METHODS = [:limit, :offset, :lock, :readonly, :create_with, :from]

    include FinderMethods, Calculations, SpawnMethods, QueryMethods, Batches

我强烈建议您阅读Railscasts Episodes-239以获取更多信息。

希望这能帮到你!!!