0

私はRubyが初めてで、ほとんどの場合、それは理にかなっていますが、その後、この問題に遭遇しました.

次を使用してユーザーを検索しました。

user = User.find_by_id(user_id)

実行できuser.inspect、次のように表示されます。

#<User id: 1, username: "test_user", first_name: "test", last_name: "user">

しかし、私がやろうとすると:

user[:id] 

私は得る:

undefined method `[]' for nil:NilClass

私は何を見落としていますか?

user.rb は次のとおりです。

class User < ActiveRecord::Base

  # Validations
  validates :first_name, :last_name, :presence => true
  validates :username, :uniqueness => {:allow_blank => true}

  # Setup accessible (or protected) attributes for your model
  default_fields = [:username, :first_name, :last_name]
  attr_accessible *default_fields

  # Instance Methods
  def full_name
    "#{first_name} #{last_name}"
  end
end

さらに、もしそうなら:

user.to_s

結果は次のとおりです。

#<User:0x007fdad09717f8>

さらに、それは nil ではないと信じるようになりますが、ハッシュ値を参照することはできません。

4

2 に答える 2

0

あなたの最初の文

user = User.find_by_id(user_id)

null オブジェクトが返されたため、例外を回避するためにこれをテストする必要があります。

if( ! user.nil? )
# code with user[:id]    
end
于 2013-01-27T07:37:52.857 に答える
0

したがって、問題はコードに関連するものではなく、'user_id' 値を取得するために使用していたデータベース テーブルのデータに関連していることが判明しました。これは、他の誰かがプロジェクト内のすべてのモデルに対して適切な検証を記述したことを信頼して得たものです。

問題を再現する最小限の例を作成する必要がなければ、データベース内の悪いエントリに出くわすことはなかったでしょう。

Miguel Prz のIdeaを使用するために、次のようにしました。

user.nil? ? '' : user[:id] 

これは、私が他人の作品を決して信用してはならない理由です :)

于 2013-01-27T17:24:05.923 に答える