簡體   English   中英

為具有 3 個以上模型的關聯創建 SCOPE - Rails 4

[英]Creating a SCOPE for an association with more than 3 models - Rails 4

可以請告訴我我的 SQL 查詢哪里出錯了

我想顯示只有接受狀態@company.forms.created_this_month.forms_accepted.count表單列表,但出現以下錯誤。 我不確定我哪里出錯了 - 任何建議和幫助將不勝感激

error in terminal:
2.1.2 :043 >   company.forms.created_this_month.forms_accepted
  Form Load (3.4ms)  SELECT "forms".* FROM "forms" INNER JOIN "adverts" ON "forms"."advert_id" = "adverts"."id" INNER JOIN "users" ON "adverts"."user_id" = "users"."id" WHERE "users"."company_id" = ? AND ("forms"."created_at" BETWEEN '2016-03-01 00:00:00.000000' AND '2016-03-31 22:59:59.999999') AND (status = 'Accepted')  [["company_id", 1]]
SQLite3::SQLException: ambiguous column name: status: SELECT "forms".* FROM "forms" INNER JOIN "adverts" ON "forms"."advert_id" = "adverts"."id" INNER JOIN "users" ON "adverts"."user_id" = "users"."id" WHERE "users"."company_id" = ? AND ("forms"."created_at" BETWEEN '2016-03-01 00:00:00.000000' AND '2016-03-31 22:59:59.999999') AND (status = 'Accepted')
ActiveRecord::StatementInvalid: SQLite3::SQLException: ambiguous column name: status: SELECT "forms".* FROM "forms" INNER JOIN "adverts" ON "forms"."advert_id" = "adverts"."id" INNER JOIN "users" ON "adverts"."user_id" = "users"."id" WHERE "users"."company_id" = ? AND ("forms"."created_at" BETWEEN '2016-03-01 00:00:00.000000' AND '2016-03-31 22:59:59.999999') AND (status = 'Accepted')


models
company.rb
has_many users
has_many :forms, through: :users

user.rb
belongs_to company
has_many adverts

advert.rb
belongs_to user
has_many forms

form.rb
belongs_to advert
scope :forms_accepted, -> {where(['status = ?', 'Accepted'])}
scope :created_this_month, -> { where(created_at: Time.now.beginning_of_month..Time.now.end_of_month) }


schema
  create_table "companies", force: true do |t|
    t.string   "companyname"
    t.string   "tel"
    t.string   "email"
  end

  create_table "users", force: true do |t|
    t.string   "email"
    t.string   "firstname"
    t.string   "lastname"
    t.integer  "company_id"
  end

  create_table "adverts", force: true do |t|
    t.string   "title"
    t.text     "content"
    t.integer  "user_id"
  end

  create_table "forms", force: true do |t|
    t.string   "firstname"
    t.string   "lastname"
    t.string   "email"
    t.string   "currentJob"
    t.string   "currentEmployer"
    t.integer  "advert_id"
    t.string   "status"
  end

代替:

scope :forms_accepted, -> {where(['status = ?', 'Accepted'])}

scope :forms_accepted, -> {where(status: 'Accepted'])}

就像您在第二個范圍中使用的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM