2014-02-20 2 views
0

у меня есть такие две модели:рельсы смотреть HAS_MANY отношению

class Article < ActiveRecord::Base 
    belongs_to :articles_type 
end 




class ArticlesType < ActiveRecord::Base 
    has_many :articles 
end 

и в контроллере я пишу:

@articles = Article.where(article_type_id: params[:id]) 

и ввиду (Haml) я стараюсь:

= @articles.articles_type.id 

= @articles.articles_types.id 

= @articles.first.articles_type.id 

= @articles.first.articles_types.id 

как Могу ли я отобразить этот article_type.id, но только для первой строки?

теперь я получить

undefined method `articles_type' 

, но почему? что я делаю неправильно? как отобразить идентификатор вложенной модели?

ответ

0

Неопределенный метод сообщения - это потому, что @articles не имеет метода articles_type. Чтобы использовать этот метод, вам нужно обратиться к одному экземпляру статьи. Вы можете сделать это с помощью звонка до @articles.first или путем итерации по коллекции.

= @articles.first.articles_type.id 

это линия, которую вы хотите использовать.

1

@articles будет набор предметов, а не только один (потому что вы использовали метод where). Вы должны будете сделать:

@articles.first.articles_type_id 

(Также обратите внимание, что вы не должны делать .articles_type.id, потому что @articles.first уже имеет идентификатор типа)

+0

нет, что, если я хочу извлечь из ArticlesType какое-то поле, называемое a_text? –

+0

Да, в этом случае вам нужно будет сделать '@ articles.first.articles_type.a_text'. Все зависит от того, что вы хотите сделать. Если вы когда-либо захотите просто получить доступ к идентификатору, и ваша модель уже имеет идентификатор, тогда лучше просто получить доступ к нему из этой модели по соображениям производительности и оптимизации. – MrDanA

0

Выглядит, как вы получили вашу логику назад ,

Основываясь на ваших моделях, статья принадлежит к типу article_type.

@articles.first.article_type.id 
# OR @articles.first.article_type_id 

Просто выглядит, как вы неправильно плюрализация .article_types, когда он должен быть .article_type.

Смежные вопросы