навигационная навигационная система

У меня есть приложение с тремя моделями:

клиент

has_many :Бумагаs

Бумага

has_many :страницаs
belongs_to :клиент

страница

belongs_to :Бумага

I can do this in code: @Бумага.клиент.name

But I am unable to do @Бумага.страница.name NoMethodError is produced

What I am doing wrong? These are all nested models, where клиент is at high level.

0
nl ja de

2 ответы

Ваш объект Paper имеет много страниц, поэтому нет метода page . Если вы хотите получить имена всех страниц, принадлежащих объекту Бумага , вам потребуется выполнить итерацию по ассоциации pages :

for page in @paper.pages
    puts page.name
end
1
добавлено

Хотя объяснение Марка абсолютно верно, использование цикла для в ruby для этой цели (и только для any ) действительно не является идиоматическим. Использование каждого гораздо чаще встречается:

@paper.pages.each { |page| puts page.name }

Если вам просто нужен список имен, вы можете использовать < код> карта :

@paper.pages.map(&:name)

map will execute a block for each item in the collection and return an array of the results. The &:name is a shorthand for:

@paper.pages.map { |page| page.name }

Enumerable plays a big part in idiomatic Ruby.

И, чтобы не быть слишком запутанным, есть также pluck в Rails для получения массива только одного атрибута, но вы должны использовать его только в том случае, если это единственное, что вы хотите получить в коллекции:

@paper.pages.pluck(:name)
1
добавлено
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff