2017-10-22 9 views
2

誰かが助けてくれるかどうかは疑問だった。rails consoleでモデルの名前を取得すると、結果が異なる

私はレールコンソールからモデルの名前を取得しようとしていますが、それは私に別の結果を与えています。

まず私が行います

Department.first.name 

と結果は次のとおりです。

Department Load (0.3ms) SELECT "departments".* FROM "departments" ORDER BY "departments"."id" ASC LIMIT 1 
=> "Operations" 

その後、私は:

ops = Department.where(name: "Operations") 

と結果は次のとおりです。

=> ActiveRecord::Relation #[Department id: 1, name: "Operations", created_at: "2017-10-22 00:40:51", updated_at: "2017-10-22 00:40:51"]> 

しかし、その後、私が取得しようとしていた場合:

ops.name 

結果は次のとおりです。

=> "Department" 

これは私が混乱し、関連の問題につながります。助けてください!

答えて

0

を取得する必要があります

しかし、それらのそれぞれの特定の属性を与えるためにそれらを反復しなければなりません。

Model.firstを使用している場合は、特定のレコードが表示されるため、このオブジェクトの属性に直接アクセスできます。

何がしたいことは、あなたの部門のそれぞれのname属性を取得することであるなら、あなたはのようなpluck、使用することができます。

Department.where(condition).pluck(attributes) 
+0

セバスチャンありがとう、とても助かりました – Pshemski

0

ops 1つのだけの結果が単一DepartmentしかしActiveRecord::Relationではありませんしている場合でも、そう

ops.nameは、あなたのモデル名(クラス名)を与えています。あなたがwhereを使用する場合、これはあなたにActiveRecord::Relationを与え、あなたが見ることができるように、彼らはあなたのデータベースに何があるかに応じて、単一または複数のオブジェクトことができるためだあなたが最初の1

ops.first.name 
+0

私の喜び先: – Ursus

0
ops = Department.where(name: "Operations") 

戻りActiveRecord::Relationオブジェクトを。 Departmentオブジェクトではありません(あなたがcosntraint(最初、最後など)を述べていない限り)。データベースからnameフィールドを返すDepartmentクラスのnameプロパティを定義しました。 ActiveRecord :: Relationではありません。 nameには異なる意味があります。リレーション/クラスの名前を返します。

関連する問題