少し背景:これは、犬の犬小屋を管理するために設計されたアプリケーションなので、check-in
の患者とcheck-out
です。 check-in
の場合、has_current_stay
フィールドはtrue
に更新され、逆はcheck-out
に発生します。次のように自分のアプリケーションのために、私は、コントローラ内index
方法とタイプpatient
のモデルを持っているので、.orderフィールドが更新された後にインデックスの順序が変更されない
:
def index
@patients = Patient.search(params[:search]).order(:has_current_stay)
if @patients.count == 1
redirect_to @patients.first
end
end
インデックス作業正しくI check-out
まで、彼らはトップに浮いた時点で、患者、 has_current_stay
フィールドでは、それらが上部に表示されないようにする必要があります。チェックアウト時に何とかインデックスをリフレッシュする必要がありますか?
FWIW:check-out
は、患者が関連付けられているstay
でdestroy
と呼ぶことによって達成されます。以下はstays controller
のdestroy
メソッドです。
def destroy
@stay = Stay.find(params[:id]).destroy
@runn = Runn.find_by_id(@stay.runn_id)
@runn.occupied = false
@runn.save
@patient = Patient.find(@stay.patient_id)
@patient.has_current_stay = false
@patient.save
flash[:success] = "Checked out #{@patient.name}"
redirect_to patients_url
end
ご了承ください。
EDIT:SQLクエリpatients#index
が要求されます。
Started GET "/all_patients" for ::1 at 2016-04-25 15:26:04 -0500
ActiveRecord::SchemaMigration Load (0.5ms) SELECT "schema_migrations".* FROM "schema_migrations"
Processing by PatientsController#index as HTML
User Load (1.9ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 3]]
(0.8ms) SELECT COUNT(*) FROM "patients"
Rendered shared/_search_an_index.html.erb (0.7ms)
Patient Load (1.3ms) SELECT "patients".* FROM "patients" ORDER BY "patients"."has_current_stay" DESC
CACHE (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 3]]
Stay Load (0.6ms) SELECT "stays".* FROM "stays" WHERE "stays"."patient_id" = $1 ORDER BY "stays"."id" DESC LIMIT 1 [["patient_id", 2]]
Runn Load (0.6ms) SELECT "runns".* FROM "runns" WHERE "runns"."id" = $1 ORDER BY ident ASC LIMIT 1 [["id", 1]]
CACHE (0.0ms) SELECT "stays".* FROM "stays" WHERE "stays"."patient_id" = $1 ORDER BY "stays"."id" DESC LIMIT 1 [["patient_id", 2]]
CACHE (0.0ms) SELECT "runns".* FROM "runns" WHERE "runns"."id" = $1 ORDER BY ident ASC LIMIT 1 [["id", 1]]
Stay Load (0.4ms) SELECT "stays".* FROM "stays" WHERE "stays"."patient_id" = $1 ORDER BY "stays"."id" DESC LIMIT 1 [["patient_id", 35]]
Runn Load (0.3ms) SELECT "runns".* FROM "runns" WHERE "runns"."id" = $1 ORDER BY ident ASC LIMIT 1 [["id", 2]]
CACHE (0.0ms) SELECT "stays".* FROM "stays" WHERE "stays"."patient_id" = $1 ORDER BY "stays"."id" DESC LIMIT 1 [["patient_id", 35]]
CACHE (0.0ms) SELECT "runns".* FROM "runns" WHERE "runns"."id" = $1 ORDER BY ident ASC LIMIT 1 [["id", 2]]
Rendered patients/index.html.erb within layouts/application (158.0ms)
Rendered layouts/_shim.html.erb (0.3ms)
Rendered layouts/_header.html.erb (2.4ms)
Completed 200 OK in 643ms (Views: 560.0ms | ActiveRecord: 18.5ms)
'Patient.search'スコープで使用されている順序はありますか?おそらく 'Patient'モデルのデフォルトスコープで注文を使用しますか?もしそうでなければ、私はアンソニーの答えが働くことを期待するでしょう。 'index'アクションで検索したときに実行されるSQLクエリを表示できますか? – BoraMa
あなたのdesc発注がうまくいかない理由は分かりませんが、ここでは注文がうまくいく類似のサンプルがあります:http://stackoverflow.com/questions/12524311/how-to-order-results-by-an-existing-boolean -attribute-first –
@BoraMa私はSQLクエリ –