Forum: Ruby on Rails Sorting objects without an explicit find function...?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
710eb9516d466362bc80a2f8d3c31cab?d=identicon&s=25 Chris Hanks (preciousbodilyfluids)
on 2009-02-17 07:47
Hello -

I'm kind of new to Rails, and although I can usually google the answer
to whatever problem I'm having, I'm just not sure how to phrase this, so
I come to you all for help.

I'm building an educational app, which (among other things) administers
multiple-choice tests to students. I'm staying RESTful, so Test has_many
Questions and Question has_many Answers. I started by scaffolding those
three, then scrapped all the Question and Answer views. They're included
in the Test "show" view, which looks roughly like this:

---

<% for question in @test.questions %>

(question text)

<% for answer in question.answers %>

(text for each answer choice)

<% end %>

<% end %>

---

So, I've gotten that to work just fine. Now I'm trying to make both the
questions and answers each drag-and-drop sortable, so that questions in
a test can be rearranged, and answers in a question rearranged (the
latter seems unnecessary and kind of difficult, but I'm trying to work
it out in order to challenge myself). I'm following Railscast #147 for
this.

So I have almost everything set up - I've added the "position" integer
to the questions and answers, and the sort function that updates their
positions in the database after the drag-and-drop is complete. I've
confirmed that those are working.

My problem is that when I'm displaying questions and answers, I don't
know how to make Rails order them using their positions. On a hunch, I
tried changing the view to look like:

<% for question in @test.questions(:order => "position") %>
...
<% for answer in question.answers(:order => "position") %>
...

That doesn't give an error, but it doesn't work either. So, I'm kind of
at a loss about how to do this. I could do it the way the Railscast does
it, and go into the Test controller and Show action and make:

@questions = Question.all(:order => "position")

And change the view accordingly, but I wouldn't be able to fix the
answers the same way. There must be some kind of Rails Way that I'm
missing? Or some bit of syntax?

Thoughts? Thank you!
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2009-02-17 10:36
(Received via mailing list)
On Feb 17, 6:47 am, Chris Hanks <rails-mailing-l...@andreas-s.net>
wrote:

> That doesn't give an error, but it doesn't work either. So, I'm kind of
> at a loss about how to do this. I could do it the way the Railscast does
> it, and go into the Test controller and Show action and make:
>
> @questions = Question.all(:order => "position")
>
> And change the view accordingly, but I wouldn't be able to fix the
> answers the same way. There must be some kind of Rails Way that I'm
> missing? Or some bit of syntax?
>

well you can do question.answers.find(...) if you want, that find will
be scoped to the association. or you can add the condition to the
association itself, ie

class Question
  has_many :answers, :order => 'position'
end

Fred
710eb9516d466362bc80a2f8d3c31cab?d=identicon&s=25 Chris Hanks (preciousbodilyfluids)
on 2009-02-17 19:10
Ah, that did it. Thank you!
This topic is locked and can not be replied to.