필자가 쓰고 싶은 기능이 있으며 작동 방식을 결정할 수 없습니다. 첫 번째 줄은 내 단계를 순서대로 반환하고 두 번째 줄은 코스의 모든 단계에서 마지막으로 일치하는 단계를 반환하려고합니다. 나는 가까이 있지만 내가 잘못한 것을 알아야 할 필요가 있다고 생각한다. 코스는 아래의 모델에 따라, 여러 단계를 가지고있는 많은 구성 요소가모음집의 마지막 일치하는 레코드 찾기
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 => : 파괴 do def for_course (코스) 조인 (: step => {: 구성 요소 => : 코스)). 여기서 ("courses.id =?"코스).위해 다음 ("created_at") 끝 끝 또한 사용자 -> has_many : completed_steps : 통한 => : user_steps : 소스 => : 단계 – Norto23