2つのモデル、訪問者、およびユーザーを持つレールアプリがあります。訪問には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ですEには、以下の例外を除いて、失敗します。私は<%= debug visit.engineer %>
を印刷する場合
NoMethodError in Visits#index
...
undefined method `email' for nil:NilClass
が電子メール属性があるが、私は実際には、個々のいずれかを表示するには、属性を取得することはできません。
どのように私はこれらの変数にアクセスできますか?
ありがとうTudor。それはいつも何か愚かです!エンジニアとコントローラーを2回目の訪問に追加するのを忘れてしまった。一度これらの小切手を追加すると、どの小切手が欠落していたかを簡単に確認できました。検証基準を追加する前に、これらをコンソールから追加しました。私は5分後に答えを受け入れます。 – Jack
私はあなたが 'debug visit.engineer'を印刷して属性が設定されているのを見ることができたとお考えでしたか? また、後で参照するために、 'try'メソッドを使用するとスペースを節約することができます。 'visit.engineer.try(:email)'と 'visit.controller.try(:email)' – Batkins