2014-01-13 8 views
1

Я новичок в Ruby on Rails, и у меня проблемы с простым, где с моделью.Where Clause - Ruby on Rails

Когда я пытаюсь выполнить тест № 1, результаты не работают. Новые предметы попадают на дно, несмотря ни на что.

def index 
    @user = User.where(:status => false).order(last_name: :desc).all 
    end 

Если я ввожу это в рельсы консоли не работает также, но если я удалить все это прекрасно работает в рельсах консоли, но не работает в UsersController.

Каков правильный способ сделать предложение where с заказом? Спасибо за вашу помощь!

UPDATE:

Я обновил код на следующее, но результаты все еще не в порядке:

def index 
     @user = User.where(status: false).order('last_name DESC') 
    end 
+0

вы упорядочение по 'last_name', а не' id', которое, скорее всего, гарантирует правильное упорядочение новых элементов (i f вы используете по умолчанию rails для генерации id: auto-incrementing the id) – bjhaid

ответ

1

Вы должны использовать order('last_name DESC') вместо order(last_name: :desc).

order(last_name: :desc) будет производить SQL LIKE (Вот почему ваш заказ не работает):

ORDER BY '---\\n:last_name: :desc\\n' 

order('last_name DESC') будет производить SqL право:

ORDER BY last_name DESC 
+0

Правильно, 'order' YAMLizes аргумент Hash по какой-то странной причине, которая могла бы показаться хорошей идеей после слишком большого количества бутылок крепкого алкоголя. Я не понимаю, почему вы когда-либо хотели бы поместить строку YAML в ORDER BY, что просто не имеет никакого смысла. –

+0

Так что, в конце концов, все не нужно? – evanvee

+0

@evanvee: Нет, запрос попадет в базу данных, когда вы попытаетесь прочитать значения из нее, выполнив что-то вроде '@users.each {...}'. И эту переменную действительно следует называть '@ users', а не' @ user'. –

1

Rails 4

def index 
    @user = User.where(status: false).order('last_name DESC') 
end 
+0

Так что .all в конце не нужен? – evanvee

+0

Правильно, если вы используете направляющие 4. – cowgill