Не удается получить доступ к переменным в связанной модели - PullRequest
1 голос
/ 03 декабря 2011

У меня есть приложение rails с двумя моделями, посещениями и пользователями.Посещение имеет 2 пользователя;диспетчер и инженер.Я установил отношения следующим образом, но по какой-то причине я не могу получить доступ к атрибутам соответствующего пользователя.Это потому, что я использую устройство?

Посетите модель

class Visit < ActiveRecord::Base
  belongs_to :engineer, :class_name => "User", :foreign_key => 'engineer_id'
  belongs_to :controller, :class_name => "User", :foreign_key => 'controller_id'
end

Модель пользователя

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
  attr_accessible :email, :password, :password_confirmation, :remember_me

  has_many :engineer_visits, :class_name => "Visit", :foreign_key => "engineer_id"
  has_many :controller_visits, :class_name => "Visit", :foreign_key => "controller_id"
end

Индекс посещений

<% @visits.each do |visit| -%>
  <%= visit.visit_date.strftime("%a %d/%m/%Y") %>
  <%= visit.engineer.email %>
<% end -%>

Здесь происходит сбой, за исключением следующего:

NoMethodError in Visits#index
...
undefined method `email' for nil:NilClass

Если я печатаю <%= debug visit.engineer %>, есть атрибут электронной почты, ноНа самом деле я не могу отобразить какие-либо отдельные атрибуты.

Есть идеи, как получить доступ к этим переменным?

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Мне кажется, что ваши отношения не работают должным образом.Вы пытались использовать опцию :inverse_of для своих ассоциаций?

Пример:

class Visit < ActiveRecord::Base
  belongs_to :engineer, :class_name => "User", :foreign_key => 'engineer_id', :inverse_of => :engineer_visits
  belongs_to :controller, :class_name => "User", :foreign_key => 'controller_id', :inverse_of => :controller_visits
end

Кроме того, есть ли шанс, что вы можете назвать свою ассоциацию чем-то иным, чем controller?Просто догадка, но это может быть запрещено имя переменной в рельсах из-за того, что controller является ключевым словом во многих классах.

1 голос
/ 03 декабря 2011

Может быть, визит, за который вы получаете ошибку, это визит контроллера, а не инженера.

попробуйте изменить свое представление следующим образом:

<% @visits.each do |visit| -%>
  <%= visit.visit_date.strftime("%a %d/%m/%Y") %>
  <%= visit.engineer.email unless visit.engineer.nil? %>
  <%= visit.controller.email unless visit.controller.nil? %>
<% end -%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...