私は、別のモデルに関連付けられているすべてのインスタンスを取得する、名前付きスコープをモデルに書き込もうとしています。これは私が私がAnswer.with_template
を行うとEmailTemplate
Rails 5名前付きスコープ(ポリモーフィック)、UndefinedColumn
class Answer < ApplicationRecord
has_one :email_template, as: :templateable
validates :text, presence: true
scope :with_template, -> { where.not(email_template: nil) }
end
そして、私の他のモデル
class EmailTemplate < ApplicationRecord
belongs_to :templateable, polymorphic: true
validates :pre, presence: true
validates :post, presence: true
end
ですべてのインスタンスを取得するために、スコープが必要なモデルである、このエラーが表示されます。
[3] pry(main)> Answer.with_template
(6.6ms) SELECT COUNT(*) FROM "answers" WHERE ("answers"."templateable" IS NOT NULL)
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: no existe la columna answers.templateable
LINE 1: SELECT COUNT(*) FROM "answers" WHERE ("answers"."templateabl...
^
: SELECT COUNT(*) FROM "answers" WHERE ("answers"."templateable" IS NOT NULL)
from /home/pedro/.rvm/gems/ruby-2.4.0/gems/activerecord-5.1.1/lib/active_record/connection_adapters/postgresql_adapter.rb:620:in `async_exec'
もこれを試みたが、動作しません:
scope :with_template, -> { where.not(templateable: nil) }
を動作するはずです、彼らに
を問い合わせる必要がありますあなたは私のこと、何私は自分の答えに投稿したの違いを教えてもらえますか? –
@PedroAdameVergara The * where * – Pavan
申し訳ありませんが、私はなぜ私の期待どおりに動作し、私はあなたのソリューションを使用する必要があります完全に理解していません。あなたはそれを説明できますか? –