2016-11-02 2 views
0

私はRailsプロジェクトにオブジェクトを持っていますが、私が行うときにはrecord.to_hashの値が得られますが、少なくとも1つは欠けています - 特にexperienceです。私がrecord.attributes.to_hashを実行すると、属性experienceを含むより多くのオプションが得られます。以下はbyebugを使った私の出力です。なぜこれが事実であるのか誰も説明できますか?私はupdate_attributesメソッドと組み合わせてrecord.to_hashを使ってオブジェクトを更新しましたが、私は追加の属性が必要です。.to_hashを使用しているときにRubyオブジェクトから2つの異なる値のセットを取得するのはなぜですか?

record.to_hash 
#=> {:player_url=>"http://www.unlvrebels.com//sports/m-footbl/mtt/casey_acosta_1024286.html", :headshot_url=>nil, :jersey=>"87", :first_name=>"Casey", :last_name=>"Acosta", :position=>"WR", :height=>"5110", :weight=>"160", :eligibility=>nil, :hometown_city=>"Las Vegas", :hometown_state=>"NV", :high_school=>"Chaparral HS", :biography_text=>nil, :is_basketball_player=>false, :possible_dob=>false, :possible_transfer=>false, :possible_redshirt=>false, :possible_gpa=>false, :possible_track_participant=>false, :possible_basketball_participant=>false, :possible_baseball_participant=>false, :possible_hockey_participant=>false, :possible_lacrosse_participant=>false, :possible_power_lifting_participant=>false, :possible_rugby_participant=>false, :possible_soccer_participant=>false, :possible_volleyball_participant=>false, :possible_wrestling_participant=>false, :possible_medical_alert=>false, :possible_character_alert=>false, :school_id=>664, :player_id=>nil, :position_id=>2} 
record.attributes.to_hash 
#=> {"id"=>nil, "school_site_id"=>nil, "player_url"=>"http://www.unlvrebels.com//sports/m-footbl/mtt/casey_acosta_1024286.html", "headshot_url"=>nil, "jersey"=>"87", "first_name"=>"Casey", "last_name"=>"Acosta", "position"=>"WR", "height"=>"5110", "weight"=>"160", "eligibility"=>nil, "hometown_city"=>"Las Vegas", "hometown_state"=>"NV", "high_school"=>"Chaparral HS", "major"=>nil, "previous_school"=>nil, "experience"=>"FR", "biography_text"=>nil, "has_relative_in_sports"=>false, "is_basketball_player"=>false, "possible_dob"=>false, "possible_transfer"=>false, "possible_redshirt"=>false, "possible_gpa"=>false, "possible_track_participant"=>false, "possible_basketball_participant"=>false, "possible_baseball_participant"=>false, "possible_hockey_participant"=>false, "possible_lacrosse_participant"=>false, "possible_power_lifting_participant"=>false, "possible_rugby_participant"=>false, "possible_soccer_participant"=>false, "possible_volleyball_participant"=>false, "possible_wrestling_participant"=>false, "possible_medical_alert"=>false, "possible_character_alert"=>false, "school_id"=>664, "player_id"=>nil, "position_id"=>2, "created_at"=>nil, "updated_at"=>nil} 

答えて

3

recordrecord.attributesHashクラスのインスタンスであるのに対し、Recordクラスのインスタンスです。

おそらく、to_hashメソッドがこれらの2つのクラスのインスタンスに対して異なって実装されているために、違いが生じる可能性があります。

+0

したがって、属性を使用すると、その属性以外は動作しますが、属性には 'id'などの属性が含まれています。追加のコードを使ってこれらの属性を削除せずに、私がしようとしていることを実行するためのより多くの 'Rails'方法がありますか?私が使用すべき方法があるかどうかは分かりませんでした。 – daveomcd

+0

@daveomcd 'record.attributes'はすでに' Hash'ですので、*あなたが望むものです:) 'to_hash'を呼び出す必要はありません。 'record.attributes == record.attributes.to_hash' => 'true' –

+0

これは私が' update_attributes'と一緒に使っていると思います - 'record.attributes.except(' id '、' created_at ' 、 'updated_at') ' – daveomcd

関連する問題