0

私は次のようなモデルを扱っています:

class Owner < ActiveRecord::Base
  has_many :owned
end

class Owned < ActiveRecord::Base
  belongs_to :owner
end

own_id と owner_id が適切な場所にあると推測できます。問題は、アプリ内の別の mvc チェーンのコントローラーで、

@owner = Owned.find_by_id(owned_id, :include => :owner)

動作しません。当然、owner_id、列を取得しますが、それではできません

@owned.owner # is just nil

何を与える?つまり、結果をビューに渡す前に直接割り当てを行うことができます。

@owned.owner = Owner.find_by_id(@owned.owner_id)

しかし、それはばかげているようです。さあ、私を当惑させてください。私が見逃した明らかなことは何ですか?これは私のアプリの他の場所でも機能しますが、違いを見つけることができません。いくつかの一般的なトラップはありますか?何でも役立ちます。

ありがとうございました

4

2 に答える 2

1

勝ち続けるだけです。対応する「所有者」オブジェクトが所有者テーブルから削除されました。

面白いことに、アカウントを作成する前は、Cookie ベースの ID に大量のカルマがありました。その後、クッキーが破損し、愚かな質問しかできなくなり、カルマは 1 のままになりました。

于 2009-05-11T09:16:43.067 に答える
1

StackOverflow のレピュテーションは Cookie ベースではありません。もう一度ログインする必要があるかもしれません。

あなたの質問は、所有者テーブルにowned_id フィールドがあることを暗示しているようです。それは必要ないので、削除する必要があります。

所有するテーブルに owner_id 整数フィールドが必要なだけです。

さまざまな方法でレコードと関係にアクセスできます。まず、最初に所有者レコードにアクセスすることから始めましょう。

owner = Owner.find(owner_id)
owned = owner.owned # this is an array since you a 'has_many' relationship

通常、次の方法で所有レコードにアクセスします。

for owned in owner.owned
 puts owned.name # or access any other attributes
end

所有しているレコードに最初にアクセスしたい場合は、次のようにします。

@owned = Owned.find(:all, :conditions => [ "owner_id = ?", owner_id ])
# @owned is an array so you need to iterate through it
for owned in @owned
  puts owned.owner.name # or access any other attribute from the owner
end

これらのクエリが正常に機能するようになったら、find ステートメントに :include を追加することで、熱心な読み込みについて心配することができます。これは最適化に役立つ可能性がありますが、最初から必要ではないことに注意してください。

これが役立つことを願っています。

于 2009-05-11T10:08:04.763 に答える