模型外的Rails验证



我需要对我的消息表单进行验证,其中人员输入电子邮件,电子邮件将表单定向到将接收消息的人员的id。

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

我的问题是,我需要为这个表单创建一个验证,以便只接受电子邮件,但是Message模型本身没有电子邮件。最好的尝试是什么?

创建如下

 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

提前感谢!

——编辑——

正如我在上面的评论中所说,我添加了一个消息。行

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

但是做一些测试,我发现我不能再打开我的消息,我得到一个错误说:

Validation failed: To Email possui formato incorreto

什么线索吗?

这一行

@message = Message.new(params[:message])
如果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

所以如果我理解正确,你会收到一封电子邮件,你只是不想存储在你的模型中,因为没有这样的字段。

一种方法是使用form_tag而不是form_for来创建自定义表单。然后,您可以拥有任意多的非模型属性。

要检查这是否是一个正确的邮件,您将在创建操作中接收参数,并有一个方法来检查这是否是一个有效的邮件。如果没有,它会闪烁一个错误消息,并重定向到一个页面,如果你需要的话。

你可以通过javascript做客户端检查,或者你可以做自定义验证:http://www.perfectline.ee/blog/building-ruby-on-rails-3-custom-validators(你使用rails 3吗?)

相关内容

  • 没有找到相关文章

最新更新