开发者

Problem with sorting by row ( special case )

I have a requirement for sorting Contacts records by primary_contact_no.

My Contact fields contain primary_contact_no ,email , mobile_no.

this is no brainier....

BUT my view requires me to show mobile_no under Contact Number(view label) when primary_contact_no is not present.

Contacts.find(:all, :order => "primary_contact_no")

Now When i sort it by primary_contact , in the view , the records where these fields are absent get replaced with mobile_no bu开发者_Go百科t since they are already sorted by contact_no they appear at the bottom of the search result.

How can i combine the two results ( in case primary_contact is not present and carry out search on the combined record )

Is there any other solution to the problem where i can combine the row search records or something like that???

P.S. I have used will paginate.


You could order once you retrieve them from the database.

So

contacts = Contact.all
u.sort!{|a,b| a.con_number<=> b.con_number}

Then in your Contact Model

def con_number
  primary_contact_no||mobile_no
end


MySQL and PostgreSQL both have COALESCE function, so you can do something like:

Contacts.find(:all, :order => "COALESCE(primary_contact_no,mobile_no)")

to sort the records as you want. But beware, using sql functions and raw sql has its caveats. If you decide to switch databases, you have to check if each raw sql and sql function you used like this is supported in your new RDBMSI.

I would not sort the records in my application, as that means, I can not use pagination of will paginate to select limited data and have to retrieve full set of records, sort them and then use the relevant records based on pagination parameters. It will increase the response time consistently as the contacts table grows.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜