Как вернуть успех для .save (), даже если запись также существует? - Рельсы 3.1 - PullRequest
1 голос
/ 13 декабря 2011

Я пытаюсь изменить следующий код, чтобы он возвращал флэш-уведомление и успех, если существует email.

class SubscribersController < ApplicationController
  respond_to :json

  def create
    @subscriber = Subscriber.new(:first_name     => params[:first_name],
                                 :last_name      => params[:last_name],
                                 :email          => params[:email],
                                 :ip_address     => request.remote_ip,
                                 :referring_page => request.referer )
    if @subscriber.save
      flash[:notice] = "You've been subscribed!"
    end

    respond_with(@subscriber)
  end

end

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

Я не хочу выдавать ошибку, если электронное письмо уже существует (что проверяет модель) - я все еще хочу сказать вам:я подписан.

Я пытался проверить с помощью .present?, но выдает ошибку:

<code><h1>
  NoMethodError
    in SubscribersController#create
</h1>
<pre>undefined method `model_name' for ActiveRecord::Relation:Class

Ответы [ 2 ]

3 голосов
/ 13 декабря 2011

Полагаю, вы можете использовать динамический искатель для этого вопроса.

@subscriber = Subscriber.find_or_initialize_by_email(params[:email], { :first_name => ..., })

однако, я думаю, сохранение сохраненной записи вернет false, поэтому вам нужно проверить, если

@subscriber.persisted? or @subscriber.save
  flash[:success] = "You've been subscribed!"
end
2 голосов
/ 13 декабря 2011

Добавление проверки в модели подписчика

validates_uniqueness_of :email

и в контроллере

@subscriber.valid?

if @subscriber.errors.on(:email) == "XXX"
   flash[:error] = "email address exists already"
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...