Соединение двух моделей в рельсы - PullRequest
0 голосов
/ 23 октября 2018

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

tse.headoffice.head_office_id

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

has_many :tse

и в tse.rb как

belongs_to :headoffice

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

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

Ответы [ 4 ]

0 голосов
/ 25 октября 2018

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

Кроме того, почему headoffice имеет поле с именем headoffice_id?Разве это не просто поле с именем id?Наконец, один кирка, она должна называться head_office, а не headofficetse тоже не хорошее имя.Что такое 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)
0 голосов
/ 23 октября 2018

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

<%= tse.try(:headoffice).try(:head_office_id) %>
0 голосов
/ 23 октября 2018

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

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

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

<%= tse.headoffice_id %>
0 голосов
/ 23 октября 2018
<% if tse.headoffice.present? %>
  <%= tse.headoffice.head_office_id %>
<% end %>
...