1

Rhomobile で左結合を実行することはできませんか?

1対多の関係を持つモデルPriceGroups、PriceLookupがあります(つまり、各PriceGroupと多くのPriceLookupレコードがあります)。

PriceGroups テーブルから必要な情報を取得するために、単純な SQL Left Join を実行する必要があります。

SELECT * FROM PriceLookup 
LEFT JOIN PriceGroups ON PriceLookup.price_group_code=PriceGroups.code

これを price_lookup モデルに追加しました。

  belongs_to :price_group_code, 'PriceGroups'

以下は、私がRhomobileで試したことです

PriceLookup.find_by_sql("SELECT *
FROM PriceLookup
LEFT JOIN PriceGroups on PriceLookup.price_group_code=PriceGroups.code")

しかし、私はエラーが発生します:

Error: could not prepare statement: 1; Message: no such table: PriceGroups

2 つの選択を実行して自分で参加できることはわかっていますが、これは非常にくだらない方法です。

4

2 に答える 2

2

デフォルトの PropertyBags を使用せずに、RhoMobile モデルを FixedSchema として作成する必要があります。

それ以外の場合、SQLite に実際のテーブルはありませんが、Key-Value ストアを実装する特別な objectValues テーブルを使用しています: http://docs.rhomobile.com/rhodes/rhom#fixed-schema

例:

dbPT = ::Rho::RHO.get_src_db('PriceLookup')
sql = "SELECT * FROM PriceLookup LEFT JOIN PriceGroups ON PriceLookup.price_group_code=PriceGroups.code"
lines = dbPT.execute_sql(sql)
于 2013-09-13T14:11:44.463 に答える
0

これは、PriceGroups テーブルがまだ初期化 (作成) されていない場合に発生する可能性があります。テーブルが存在しない場合は、モデル クラスのロード時にテーブルが作成されます。あなたの場合、モデルクラスを呼び出すだけで、必要に応じてモデルクラスがロードされ、テーブルが作成されます。

PriceGroups; #Only for create the table

PriceLookup.find_by_sql("SELECT * FROM PriceLookup LEFT JOIN PriceGroups on PriceLookup.price_group_code=PriceGroups.code")
于 2013-02-11T10:29:57.737 に答える