Соединение двух моделей в рельсы
Я пытаюсь назвать значение из другой модели внутри представлений.
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)