2014-09-03 4 views
0

У меня есть флажок (: уведомлять) для Почты, и я хочу отправлять электронные письма при создании нового сообщения, только если он установлен. Однако ActionMailer отправляет электронные письма, даже если он не проверен. Вот фрагмент кода:ActionMailer, отправляющий электронную почту, даже если флажок не установлен

if @post.save 
    unless params[:post][:notify].nil? 
    PostMailer.notify_new(@post).deliver 
    end 
    ......... 
    .............. 

Форма:

= bootstrap_form_for @post, remote: true do |f| 
    = f.text_area :body 
    = f.check_box :notify, label: "" 
    = f.submit "Send", class: "button" 

Как я могу это исправить таким образом, что электронные письма доставляются только тогда, когда извещать флажок? Спасибо!

+0

Это не имеет никакого отношения к вашей почтовой программе. Ваша логика флажка находится в представлении. И отправка почтовой логики (и должна быть) в контроллере. Поэтому примените фильтр, чтобы отправлять только те запросы на контроллер, которые отмечены. – shivam

+0

params могут возвращать значение '' '', которое не равно нулю. попробуйте '.present?' вместо '.nil?' – itsnikolay

+0

@shivam Извините? Это IS в контроллере в методе создания. – user3477051

ответ

0

Я бы дважды уточнил, что params[:post][:notify] - правильный параметр, который нужно искать. Если эти параметры всегда появляются, я бы посмотрел на вашу логику взгляда. Кроме того, если вы собираетесь использовать этот метод проверки, измените условие на if. Например:

if params[:post][:notify].present? 
    PostMailer.notify_new(@post).deliver 
end 
1

Вы должны переместить все это в Post модель ...

class Post 
    attr_accessor_with_default :notify, false 
    after_create :deliver, :if => Proc.new {|p| p.notify} 

    def deliver 
    PostMailer.notify_new(self).deliver 
    end 
end 

Тогда УВЕДОМЛЯТЬ будет рассматриваться как логическое значение. Не забудьте указать атрибут :notify в вашем контроллере.

Смежные вопросы