0

私は次の関係を持っています

Foo多くを持っていますBar

それから私はFooモデルを持っていますが、これBarは単なるです。のみで構成されるモデルを作成できましたが、可能かどうか、およびクエリをすべて作成してモデル内の として内部に格納する方法を知りたいです。StringidBarString idFooBarslistFoo

SQLを使用する必要がある場合は問題ありません。

別の方法として、テーブルを削除してBarテーブルのフィールドとして配置することもできますが、Fooこれにはシリアル化が必要であり、SQL 検索の推測が難しくなり、効率が低下します。

スキーマは次のとおりです

Foohas_manyFoo_BarsBarhas_manyBar_Foos

Foohas_and_belongs_to_manyではない理由は、シングルまたはBarシングルの追加情報が終わりのないチェーンになるためです。FooBarFooBar

データベースは、データを管理するための視覚的なインターフェイスとしてレールを使用している別のアプリケーションと共有されています。

私の質問は、本当にFoo_Barsモデルが必要ですか?

4

2 に答える 2

2

バーモデルを作成する必要があるようです。Rails のデフォルトのプライマリ ID は、文字列ではなく整数です。Foo に「belong_to」するすべてのバーをリストしたいようです。したがって、移行は次のようになります。

Rails g モデルバー foo_id:integer

/models/bar.rb 内:

class Bar < ActiveRecord::Base
  belongs_to :foo
end

あなたのモデル/foo.rb:

class Foo < ActiveRecord::Base
  has_many :bars
end

foo 外部 ID を持ついくつかの Bar レコードを作成すると、foo に属するすべての bar を次のように照会できるようになります。

foo = Foo.find id
foo.bars

またはバーから:

Bar.where(:foo_id => id)

これを読んで練習してください: http://guides.rubyonrails.org/active_record_querying.html

于 2013-04-03T20:47:43.867 に答える
1

Foo モデルでこのメソッドのようなものを持つことができます

class Foo < ActiveRecord::Base
  serialize :barlist

  ...

  def store_barlist
    update_attributes(:barlist => self.bars.map {|bar| bar.string_id })
  end
end

これをコントローラーで呼び出すには、次のようにする必要があります。

def some_controller_action
  @foo = Foo.find(1)
  @foo.store_barlist
end
于 2013-04-03T20:43:38.070 に答える