take a gander at the development.log - find that sql query that is
being generated by that find. Try that query on your DBMS and see if
it returns the blogposts in the order you expect.
that can't be - either your syntax is incorrect and it shows an error
in the log and on the screen, or it is correct and it shows the SELECT
with the ORDER clause. Your syntax appears to be correct, by the way.
for some reason the log isn't showing the order by clause:
Rendering blogposts/show
[4;35;1mBlogcomment Load (0.4ms) [0m [0mSELECT * FROM
`blogcomments` WHERE (`blogcomments`.blogpost_id = 17) [0m
[4;36;1mBlogcomment Columns (1.3ms) [0m [0;1mSHOW FIELDS FROM
`blogcomments` [0m
Completed in 133ms (View: 54, DB: 8) | 200 OK [http://localhost/
blogposts/17]
You are looking at the wrong query. That is the one for
Blogpost.find(params[:id])....
The one you have sorted is
@blogcomment = Blogcomment.find(:all, :order => "created_at desc")
which should appear above that one.
You have not specified a sort in the Blogpost query.
Try this - check that you are not calling the find somewhere else. If
necessary, be sure and put a debugger break point and see what code is
really executing.
Here you are unconditionally redirecting to :action => "show" so what's
the point of the above fetch of Blogcomment?
end
By the way, this method is trying to do too much.
- It's fetching an array of Blogcomments (that it doesn't seem to do
anything with)
- It finds a user (and doesn't seem to use it either)
- It finds a Blogpost and creates a new Blogcomment on it.
- It sets flash[:notice]
- And finally redirects to the "show" action
The only effective thing it does should be handled by the Blogcomment's
"create" method anyway.
At least in the modern RESTful Rails world. You have written a custom
method for something that can be easily handled by the basic CRUD
actions of RESTful controllers.
The redirect_to will create a new request/response cycle causing all
instance variables set in this method to be freed for garbage
collection.
0mSELECT * FROM `blogcomments` ORDER BY created_at desc LIMIT 1
So if it is in the log, why isn't it ordering the comments?
'LIMIT 1' at the end of that SQL query means that only one record is
being returned. Either you haven't found the right query in the log, or
something in the Blogcomment model is preventing more records being
returned via a find(:all).