我有一个有两种模型,访问和用户的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 -%>
这是wher Ë失败,但下列情况除外:
NoMethodError in Visits#index
...
undefined method `email' for nil:NilClass
如果我打印<%= debug visit.engineer %>
有一个电子邮件属性,但我实际上并不能获得任何个人的属性显示。
关于如何访问这些变量的任何想法?
感谢都铎王朝。这总是愚蠢的!我忘记了将工程师和控制器添加到列表中的第二次访问中。一旦我添加了这些检查,很容易看出哪一个丢失。在添加验证条件之前,我通过控制台添加了这些内容。 5分钟后我会接受答案。 – Jack
我以为你说过,如果你打印出'debug visit.engineer'并且可以看到属性被设置了?另外,为了将来的参考,如果您使用rails'try'方法,则可以节省一些空间。 'visit.engineer.try(:email)'和'visit.controller.try(:email)' – Batkins