В rubyonrails, как получить связанный класс модели из объекта ActiveRecord :: Relation? - PullRequest
4 голосов
/ 24 ноября 2010

Предположим, у меня есть модель:

class Post
end  

posts = Post.where(***)  
puts posts.class # => ActiveRecord::Relation  

Тогда как я могу получить имя класса модели через переменную 'posts', может быть, какой-нибудь метод с именем model_class_name:
ставит posts.model_class_name # => Post

Спасибо:)

Ответы [ 3 ]

5 голосов
/ 22 октября 2015

Атрибут #klass ActiveRecord :: Relation возвращает класс модели, на котором построено отношение:

arel = User.where(name: "fred")
arel.klass    # User

Чтобы получить имя класса:

arel.klass.name

Протестировано в ActiveRecord 4.2.4

0 голосов
/ 08 марта 2019

Для решения, которое работает, даже если нет связанных элементов:

class Post < ActiveRecord::Base
   has_many :comments
end

Post.reflect_on_association(:comments).klass
=> Comment
0 голосов
/ 24 ноября 2010

Самый простой и прямой ответ на ваш вопрос:

posts.first.class.name

Что эквивалентно написанию:

posts.[0].class.name

Вы можете сделать это, потому что ваш запрос вернет перечисляемый результат. (ActiveRecord :: Relation реализует перечислимый интерфейс Ruby).

- Скотт

...