Проверка рельсов вне модели - PullRequest
1 голос
/ 25 апреля 2011

Мне нужно сделать проверку формы моего сообщения, где человек вводит электронное письмо, а электронная почта направляет форму идентификатору человека, который получит сообщение.

Email:<br />
    <%= f.text_field :to %>
    <%= error_message_on @message, :to %>
                      ...
            <%= submit_tag "Send" %>

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

Создание таково

 def create
@message = Message.new(params[:message])
@message.sender = @profile
@message.recipient = Profile.find_by_email(params[:message][:to])

if @message.save
  flash[:notice] = "Message sent"
  redirect_to profile_messages_path(@profile)
else
  render :action => :new
end
end

Заранее спасибо!

---- EDIT ----

Как я уже сказал в комментарии выше, я добавил в message.rb строку

validates :to, :format   => { :with => email_regex, :message => "Email possui formato incorreto" }

Но, выполнив некоторые тесты, я обнаружил, что больше не могу открывать свои сообщения, я получаю сообщение об ошибке:

Validation failed: To Email possui formato incorreto

Есть подсказка?

Ответы [ 3 ]

1 голос
/ 25 апреля 2011

Эта строка

@message = Message.new(params[:message])

должно выдать ошибку, если в модели сообщений отсутствует метод to =. Итак, я полагаю, у вас уже есть этот вид «виртуального атрибута», поэтому скажем что-то вроде этого:

def to
  @to
end

def to=(value)
  @to = value
end

для проверки правильности адресов электронной почты, вы можете добавить это к модели:

validate :validate_email

def validate_email
  errors.add :to, :invalid unless to.match /some email validation regex/
end

Надеюсь, это поможет.

0 голосов
/ 25 апреля 2011

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

Способ сделать это - использовать form_tag вместо form_for вЧтобы создать пользовательскую форму.Затем вы можете иметь столько атрибутов, которые вам не нужны.

Чтобы проверить, является ли это правильное письмо, вы получите параметры в действии create и получите метод, который проверяет, является ли это действительное письмо.Если нет, то при желании вы получите сообщение об ошибке и перенаправите на страницу.

0 голосов
/ 25 апреля 2011

вы можете выполнить проверку на стороне клиента через javascript, или вы можете сделать пользовательские проверки: http://www.perfectline.ee/blog/building-ruby-on-rails-3-custom-validators (вы используете рельсы 3?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...