Соединение двух моделей в рельсы

Я пытаюсь назвать значение из другой модели внутри представлений.

tse.headoffice.head_office_id

Определил отношения в headoffice.rb как

has_many :tse

а в це.рб как

belongs_to :headoffice

Теперь я получаю ошибку как неопределенный метод

неопределенный метод head_office_id для nil:NilClass

4 ответа

<% if tse.headoffice.present? %>
  <%= tse.headoffice.head_office_id %>
<% end %>

try() позволяет вызывать методы для объекта, не беспокоясь о возможности того, nil и, таким образом, поднимая исключение

<%= tse.try(:headoffice).try(:head_office_id) %>

Предполагая, что модель HeadOffice имеет атрибут с именем head_office_id:

<%= tse.headoffice.head_office_id if tse.headoffice %>

Если это не так:

<%= tse.headoffice_id %>

Что-то в этом не выглядит правильно. Обычно has_many ссылка во множественном числе. Вполне возможно, что ваша схема именования мешает самоуверенной магии Rails.

Также почему бы headoffice есть поле под названием headoffice_id? Разве это не просто поле под названием id? Наконец, один кирка, это надо называть head_office не headoffice, А также tse это тоже не хорошее имя. Что такое tse? Объясните это, если вы можете, и сформируйте его таким образом, который может быть единственным или множественным. Rails работает намного лучше, если вы будете следовать этим простым правилам именования.

https://gist.github.com/iangreenleaf/b206d09c587e8fc6399e

Смотрите простой пример ниже:

post.rb

has_many :comments

comment.rb

belongs_to :post

Чтобы получить доступ к комментариям к записи, вы должны набрать следующее:

Post.first.comment.body

Или, если вы не уверены, что в сообщении есть комментарий, вы бы сказали:

Post.first.try(:comment).try(:body)
Другие вопросы по тегам