[英]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.