2015-07-22 5 views
0

У меня есть 2 стола: проекты и требования. Каждое требование принадлежит одному проекту. Я хочу, чтобы иметь возможность заказывать требования по названию проекта.Заказать по иностранному ключевому знаку

Я попытался Demand.joins (: проект) .order (: название), но у меня есть эта ошибка:

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

для спроса есть только один проект. почему вы хотите заказать только один объект проекта.? – Athar

+0

Я хочу заказать требования по алфавитному названию их проекта. – saraf

ответ

3

попробовать

@demand.joins(:project).order("projects.name") 

аргумент order - поле db. если задействовано более одной таблицы (как есть в соединении), вы всегда должны указывать таблицу. Когда вы не укажете его, вы рискуете, что созданный rails sql ищет это поле в неправильной таблице, как это происходит здесь.

0

Способ, которым вы его написали, всегда будет пытаться выполнить его на первой таблице. Требования в этом случае. Всякий раз, когда в таблице содержится больше одной таблицы, и вы хотите выполнить запрос в другой таблице, тогда сначала вы должны ссылаться на нее с именем таблицы. В данном примере это будет:

@demand.joins(:project).order("projects.name") 

Только если вы хотите условие на втором столе

@demand.joins(:project).where("projects.name = ?","My Project") 
Смежные вопросы