Conditional ordering for multiple columns
===

I have a Post model and a View model (which logs the view of each post by a user) as follows: 


    class View < ActiveRecord::Base
        belongs_to :user, :class_name => 'User'
        belongs_to :post, :class_name => 'Post'
        validates_uniqueness_of :user_id, :scope =>:post_id
    end

Each post has a boolean field named "special". 

I want to fetch all posts with following sort conditions:

 1. If a post is 'special' AND NOT VIEWED by the current user (say user_id=2), then that should appear on top in the result, internally sorted by id in descending order).
 2. Sort all other posts (not special and viewed-special) on the basis of id field for the posts.

Cant figure out if and how I can do that. 

To start with, I tried the following query:

    posts = Post.order("(case when special = true then 'special desc, id desc' else 'id desc' end)")

But it behaves in a funny manner: returns all special posts in top followed by regular posts but with ids sorted in ascending order. 

What am i missing here? Also, how can I use join (for views table) with such a complex order by clause? I tried to write a SQL for this but struggling there also! Show me some light :) 

P.S I'm new to Rails and still learning.