0

アクティブレコードでモデルをナビゲートできない理由がわかりません。

has_one プロファイルを持つ User モデルがあります (実際には、ユーザーの詳細)

class User < ActiveRecord::Base
  has_one :profile, :dependent => :destroy 
end

ユーザーと市に属しているモデル プロファイル

class Profile < ActiveRecord::Base
  belongs_to :user
  belongs_to :city
end

そしてモデル都市 has_many Profiles

class City < ActiveRecord::Base
  belongs_to :country
  has_many :profiles  
end

私の user_controller では、次のようにプロファイルにアクセスできます。

@user = User.find(params[:id])
logger.info(@user.profile.inspect)

しかし、私はこのように深く行くことはできません:

@user = User.find(params[:id])
logger.info(@user.profile.city.inspect)

戻り値

undefined method `city' for nil:NilClass

私が取得したいのは、Profile モデルに保存されている city_id からの都市の名前です。誰かが私が間違っていることを説明できますか? ありがとう

4

1 に答える 1

2

それはあなたがそのために持っていないからですProfileUserすなわち)@user.profileですnilprofileしたがって、最初に作成して実行する必要がuserあります@user.profile.city。それが動作します。profileあなたがまだいくつかのレコードのためであるかもしれないと思うなら、あなたはそれを持っているレコードのためnilに取得したいので、あなたは使うことができます。cityprofiletry

    @user.profile.try(:city)
于 2013-03-08T18:28:27.027 に答える