我正在建立一个求职申请网站。学生可以申请工作,学生有许多申请,这些申请中的每一个只有一个连接的职位。当我查询数据库时,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)
答案 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以获取更多信息。
希望这能帮到你!!!