我需要对我的消息表单进行验证,其中此人输入电子邮件,并且电子邮件将表单指向将接收消息的人员的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
提前致谢!
---- ---- EDIT
正如我在上面的评论中所说,我在message.rb中添加了一行
validates :to, :format => { :with => email_regex, :message => "Email possui formato incorreto" }
但是做了一些测试我发现我再也无法打开我的消息了,我得到一个错误说:
Validation failed: To Email possui formato incorreto
有任何线索吗?
答案 0 :(得分:1)
这一行
@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
我希望这会有所帮助。
答案 1 :(得分:0)
您可以通过javascript进行客户端检查,或者您可以进行自定义验证:http://www.perfectline.ee/blog/building-ruby-on-rails-3-custom-validators(您使用的是rails 3吗?)
答案 2 :(得分:0)
因此,如果我理解正确,您会收到一封您不想存储在模型中的电子邮件,因为没有这样的字段。
执行此操作的方法是使用form_tag而不是form_for来创建自定义表单。然后,您可以拥有所需的非模型属性。
要检查这是否是正确的邮件,您将在创建操作中收到参数,并使用一种方法检查这是否是有效的电子邮件。如果没有,它会闪烁错误信息并重定向到页面,如果你想要的话。