我有2个表:项目和需求。每个需求都属于一个项目。我希望能够通过项目的名称来命令。
我尝试了Demand.joins(:project).order(:name)但我有这个错误:
SQLite3::SQLException: no such column: demands.name: SELECT "demands".* FROM "demands" INNER JOIN "projects" ON "projects"."id" = "demands"."project_id" ORDER BY "demands"."name" ASC
这是我的架构:
ActiveRecord::Schema.define(version: 20150721144552) do
create_table "demands", force: :cascade do |t|
t.string "title"
t.string "description"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "project_id"
t.integer "skill_id"
t.integer "user_id"
end
add_index "demands", ["project_id"], name: "index_demands_on_project_id"
create_table "projects", force: :cascade do |t|
t.string "name"
t.string "image"
t.string "description"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
end
答案 0 :(得分:3)
尝试
@demand.joins(:project).order("projects.name")
order
的参数是一个db字段。如果涉及多个表(因为在连接中),您应该始终指定表。当你没有指定它时,你冒着rails生成的sql在错误的表中查找该字段的风险,就像这里发生的那样。
答案 1 :(得分:0)
您编写它的方式总是尝试在第一个表上执行它,即在这种情况下需要。每当包含多个表并且您想要在其他表上执行查询时,您应该使用表名引用它。 在这个例子中,它将是:
@demand.joins(:project).order("projects.name")
例如,如果您想要第二张桌子上的条件
@demand.joins(:project).where("projects.name = ?","My Project")