1

名前空間付きのモデルを使用して、gem に抽出された共通のモデルのセットがあります。

module Gemifive
  class Activity < ActiveRecord::Base
    belongs_to :user
  end

  class User < ActiveRecord::Base
    has_many :activities
  end
end

それが宝石「ジェミファイブ」にあります。ここまでは順調ですね。

この宝石のモデルを使用するアプリでは、次のことができますGemifive::Activity.where(user_id: user.id)。そのテーブルにはuser_id列があるため、これは正常に機能します。

SELECT "gemifive_activities".* FROM "gemifive_activities" WHERE "gemifive_activities"."user_id" = 18`

ただし、次は機能しませGemifive::Activity.where(user: user)。これにより、無効な次の SQL が生成されます。

SELECT "gemifive_activities".* FROM "gemifive_activities" WHERE "gemifive_activities"."user" = 18

私は問題なくアクセスできるGemifive::Activity.first.userので、belongs_to関連付けが機能していることがわかります。この ActiveRecord 規則を使用できないのはなぜですか?

4

1 に答える 1

3
Gemifive::Activity.where(user: user)

これは無効な ARel であり、単純明快です。モデルの名前空間とは関係ありません。上記のコードでは、ARel はハッシュのキーを列名として使用しており、そのまま使用されます。あなたができることは

Gemifive::Activity.where(user_id: user)
于 2013-07-08T18:57:16.957 に答える