如何在不声明关联的情况下在Rails中正确编写此SQL查询?
我在Rails应用程序中有一个独立的问题模型,通过YAML加载问题。我通过创建SaleQualifier(有一个问题id字段)找到正确的问题并将其加载到视图中,但我没有声明关联(例如SaleQualifier有一个问题),因为这会破坏站点的其他部分 现在,我希望根据SaleQualifier和Question模型中的字段在我的应用程序中查找SaleQualifier,我正在尝试编写正确的SQL查询,以便检索记录。有谁能帮助我理解如何有效地编写此命令,因为这是我第一次尝试编写自己的SQL命令 我的模式:如何在不声明关联的情况下在Rails中正确编写此SQL查询?,sql,ruby-on-rails,postgresql,Sql,Ruby On Rails,Postgresql,我在Rails应用程序中有一个独立的问题模型,通过YAML加载问题。我通过创建SaleQualifier(有一个问题id字段)找到正确的问题并将其加载到视图中,但我没有声明关联(例如SaleQualifier有一个问题),因为这会破坏站点的其他部分 现在,我希望根据SaleQualifier和Question模型中的字段在我的应用程序中查找SaleQualifier,我正在尝试编写正确的SQL查询,以便检索记录。有谁能帮助我理解如何有效地编写此命令,因为这是我第一次尝试编写自己的SQL命令 我的
create_table "questions", force: true do |t|
t.text "question_text"
t.string "answer_type"
t.integer "next_question_id_yes"
t.integer "next_question_id_no"
t.datetime "created_at"
t.datetime "updated_at"
t.string "sale_stage"
t.boolean "collectable", default: false
end
create_table "sale_qualifiers", force: true do |t|
t.integer "question_id"
t.integer "next_question_id", default: 1
t.datetime "created_at"
t.datetime "updated_at"
t.integer "sales_opportunity_id"
t.boolean "has_answer", default: false
t.integer "prior_question_id", default: 1
t.integer "collection_id"
end
我的问题.rb:
class Question < ActiveRecord::Base
validates :next_question_id_yes, :question_text, :answer_type, presence: true
File.open("#{Rails.root}/config/initializers/questions.yml", 'r') do |file|
YAML::load(file).each do |record|
Question.create(record) unless Question.exists?(record)
end
end
end
我试图达到的目的是找到属于销售机会的所有SaleQualifier,其答案为“true”,并且在问题销售阶段的预期位置具有问题id
我所尝试的:
SaleQualifier.find_by_sql("SELECT * FROM sale_qualifiers WHERE sales_opportunity_id = '83' has_answer = 'true' INNER JOIN questions ON questions.id = sale_qualifiers.question_id ORDER question.id desc")
这将导致以下错误:
SaleQualifier Load (15.8ms) SELECT * FROM sale_qualifiers INECT * FROM sale_qualifiers WHERE sales_opportunity_id = '83' has_answer = 'true' INNER JOIN questions ON questions.id = sale_qualifiers.question_id ORDER question.id desc
PG::Error: ERROR: syntax error at or near "*"
LINE 1: SELECT * FROM sale_qualifiers INECT * FROM sale_qualifiers W...
有人能帮我理解如何写这个查询吗?试试看
SaleQualifier.find_by_sql("SELECT sale_qualifiers.* FROM sale_qualifiers WHERE sales_opportunity_id = '83' has_answer = 'true' INNER JOIN questions ON questions.id = sale_qualifiers.question_id ORDER question.id desc")
谢谢-我收到以下错误:`SaleQualifier Load(0.8ms)SELECT sale_qualifiers.*来自sale_qualifiers,其中sales_opportunity_id='83'has_answer='true'internal JOIN questions.id=sale_qualifiers.question_id ORDER question.id desc PG::error:语法错误位于或接近“has_answer”第1行:…sale\u限定符,其中sales\u opportunity\u id='83'有\u答案`
SaleQualifier Load (15.8ms) SELECT * FROM sale_qualifiers INECT * FROM sale_qualifiers WHERE sales_opportunity_id = '83' has_answer = 'true' INNER JOIN questions ON questions.id = sale_qualifiers.question_id ORDER question.id desc
PG::Error: ERROR: syntax error at or near "*"
LINE 1: SELECT * FROM sale_qualifiers INECT * FROM sale_qualifiers W...
SaleQualifier.find_by_sql("SELECT sale_qualifiers.* FROM sale_qualifiers WHERE sales_opportunity_id = '83' has_answer = 'true' INNER JOIN questions ON questions.id = sale_qualifiers.question_id ORDER question.id desc")