私は書き込みたい機能を持っていて、それがどのように機能するかは分かりません。最初の行は自分のステップを順番に返し、2行目はコースのすべてのステップで最後に一致するステップを返すようにします。私は近くにいると思うが、私が間違ったことを知る必要がある。コースは以下のモデルごとに、多くのステップを持っている多くのコンポーネントを持っていコレクションの最後に一致するレコードを見つける
ActiveRecord::StatementInvalid: PG::Error: ERROR: syntax error at or near "1"
LINE 1: ... WHERE "user_steps"."user_id" = 3 AND (step.id in 1,2,4,8,5,...
^
: SELECT "steps".* FROM "steps" INNER JOIN "user_steps" ON "steps"."id" = "user_steps"."step_id" WHERE "user_steps"."user_id" = 3 AND (step.id in 1,2,4,8,5,3,7,6,9) ORDER BY "steps"."id" DESC LIMIT 1
私はエラーを取得しています
course_steps_in_order = course.steps.sort_by(&:component_and_step_order)
last_completed_step = current_user.completed_steps.where("steps.id in ?", course_steps_in_order).last
... ...
class Course < ActiveRecord::Base
has_many :components, :dependent => :destroy, :order => "component_order"
has_many :steps, :through => :components, :dependent => :destroy
end
class Component < ActiveRecord::Base
belongs_to :course
has_many :steps, :dependent => :destroy, :order => "step_order"
end
class Step < ActiveRecord::Base
belongs_to :component
def component_and_step_order
component_order * 100 + step_order
end
end
私はそれらをモデルで注文します:order => "step/component_order"コールをモデルで使用します。これは私が望む順序であり、IDの順序ではありません。これはあなたが話している問題を解決しますか? – Norto23
@ bouser1188763: 'current_user.completed_steps'は' order'呼び出しをどこにも含んでいますか?そうでなければ問題があります。モデル内で何をするかは関係ありません。in(2,1,3)は2-1-3の順序で行を返すと仮定していますが、その仮定は無効です。 –
はい、私は今見ます、それは彼らが順番にステップを進めることを余儀なくされるように、彼らが作成された時に応じてそれらを注文します、これは動作します(私は考える)。ユーザはhas_many:user_steps、:dependent =>:destroy do def for_course(コース) join(:steps => {:component =>:course})。ここで( "courses.id =?"、コース)。 end end また、ユーザーhas_many:completed_steps、:through =>:user_steps、:source =>: – Norto23