Изменить эту строку
@users = find(:all, :conditions => "#{weekday}sub = t")
до
@users = find(:all, :conditions => ["#{weekday}sub = t"])
Ключ условия для метода find принимает в качестве значения массив или хэш. Если вы используете массив, то первый элемент массива сразу преобразуется в выражение sql «где», если у вас нет каких-либо знаков вопроса, и если он у вас есть, то эти знаки вопроса заменяются другими элементами массива. Например, если изменить вышеуказанное на знак вопроса, то оно станет
@users = find(:all, :conditions => ["#{weekday}sub = ?", 't'])
когда 't' это строка
Лучше использовать нотацию с вопросительным знаком, потому что она более безопасна, поскольку вы не выполняете интерполяцию строк внутри строки SQL, что может быть очень вредным для данных вашего приложения.
Вы также можете записать свой запрос в хеш-условия, например
@users = find(:all, :conditions => {"#{weekday}sub".to_sym => 't'})
Большинство людей предпочитают это по сравнению с системой обозначений массива, другими словами, считают это рельсовым способом сделать это.
И еще один момент, глядя на ваш метод рассылки UserMailer #, вам не нужно делать
@users.each { |u| UserMailer.deliver_mail_out(u)}
в вашем методе User.mailout вы можете просто сделать
UserMailer.deliver_mail_out(@users)
потому что вы уже извлекаете каждый пользовательский объект из массива users в вашей рассылке UserMailer # и добавляете их получателям.