これはどのように可能ですか?私がコンソールで行ったことは、これらのオブジェクトを作成して関連付けることだけです。これは私には意味がありません。 p.jobs.firstとjは同じものです。タイトルメソッドがjで動作し、p.jobs.firstで動作しないのはなぜですか?Ruby on Railsの狂気 - 同じオブジェクトで同じメソッドを呼び出す、別の結果..why?
ruby-1.9.2-p136 :031 > p
=> #<Person id: 14, type: "Person", desc: nil, created_at: "2011-01-24 23:53:13", updated_at: "2011-01-24 23:53:13">
ruby-1.9.2-p136 :032 > p.jobs.first
=> #<Job id: 18, type: "Job", created_at: "2011-01-24 23:53:36", updated_at: "2011-01-24 23:53:36", entity_id: nil, person_id: 14, company_id: 15>
ruby-1.9.2-p136 :033 > p.jobs.first.title
=> nil
ruby-1.9.2-p136 :034 > p.title
=> nil
ruby-1.9.2-p136 :035 > j
=> #<Job id: 18, type: "Job", created_at: "2011-01-24 23:53:36", updated_at: "2011-01-24 23:53:36", entity_id: nil, person_id: 14, company_id: 15>
ruby-1.9.2-p136 :036 > j.title
=> "dfkjld"
注:名前クラスは抽象化され、ジョブに関連付けられています。そのようなクラスにはヘルパーモジュールが含まれています。
def title
if class_name == "Job"
name.value
elsif class_name == "Person"
if jobs.empty? then "Unemployed" else jobs.first.title end
else
nil
end
end
ruby-1.9.2-p136 :015 > j.name
=> #<Name id: 16, kind: nil, value: "dfklj", name_id: nil, event_id: 19, instrument_id: nil, transaction_id: nil>
ruby-1.9.2-p136 :016 > j.name.value
=> "dfklj"
'title'はあなたの' Job'モデルの属性ではないようです。どのように定義されていますか? – cam