rails MailForm 未通过验证
rails MailForm doesn't go through validation
我无法进行验证:
我的Contact.rb模特:
class Contact < MailForm::Base
attribute :name
attribute :e_mail
attribute :message
validates_presence_of :name
validates_format_of :e_mail, :with => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
validates_presence_of :message
def headers
{
:subject => "Kontaktu forma",
:to => "myemail@domain.lv",
:from => %("#{name}" <#{e_mail}>)
}
end
end
contacts_controller.rb:
class ContactsController < ApplicationController
respond_to :html, :js
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact]).deliver
end
end
new.js :
$("#main-block").html("<%= escape_javascript(render 'contact_form') %>")
_contact_form.html.erb:
<%= form_for :contact, :remote => true, :html => {:class => 'form-horizontal' } do |f| %>
<%= f.label :name, class: "control-label" %>
<%= f.text_field :name %>
<%= f.label :e_mail, class: "control-label" %>
<%= f.email_field :e_mail %>
<%= f.label :message, class: "control-label" %>
<%= f.text_area :message %>
</br>
<%= f.submit('Send', class: "btn btn-primary") %>
<% end %>
create.js:
<%= render 'save' %>
_save.js.erb:
$("ul.errors").html("")
<% if @mail.errors.any? %>
<% @mail.errors.full_messages.each do |message| %>
$("ul.errors").append($("<li />").html("<%= message.html_safe %>"))
<% end %>
<% else %>
$("#main-block").empty()
$("#main-block").html("Ziņa ir nosūtīta. Tuvākajā laikā sniegsim atbildi!")
<% end %>
之前我因为没有 .errors 方法而出错,但不知何故我修复了它,现在它绕过了所有验证并简单地接受了我的 save.js.erb
的 POST 请求
编辑:奇怪的是,通过控制台似乎一切正常。
编辑 2:尝试将 form_for 从 :contact 更改为 @contact,现在我在 _save.js.erb
中得到 nil:NilClass 方法的未定义方法“错误”
我认为 nilClass
问题可能是因为 deliver
方法没有 return 和 Contact
。而且我在任何地方都看不到您调用验证方法的地方。
大多数 AR 对象在 valid?
或 save
上调用验证。由于您没有在此处明确保存任何内容,因此我不确定何时会进行验证。但是您可以明确说明...例如
@contact = Contact.new(params[:contact])
@contact.deliver if @contact.valid?
这应该可以解决您遇到的 nilClass
问题,这可能是因为现在 @contact
是一个真正的“联系人”对象。此外,您正在显式调用验证方法。
我无法进行验证:
我的Contact.rb模特:
class Contact < MailForm::Base
attribute :name
attribute :e_mail
attribute :message
validates_presence_of :name
validates_format_of :e_mail, :with => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
validates_presence_of :message
def headers
{
:subject => "Kontaktu forma",
:to => "myemail@domain.lv",
:from => %("#{name}" <#{e_mail}>)
}
end
end
contacts_controller.rb:
class ContactsController < ApplicationController
respond_to :html, :js
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact]).deliver
end
end
new.js :
$("#main-block").html("<%= escape_javascript(render 'contact_form') %>")
_contact_form.html.erb:
<%= form_for :contact, :remote => true, :html => {:class => 'form-horizontal' } do |f| %>
<%= f.label :name, class: "control-label" %>
<%= f.text_field :name %>
<%= f.label :e_mail, class: "control-label" %>
<%= f.email_field :e_mail %>
<%= f.label :message, class: "control-label" %>
<%= f.text_area :message %>
</br>
<%= f.submit('Send', class: "btn btn-primary") %>
<% end %>
create.js:
<%= render 'save' %>
_save.js.erb:
$("ul.errors").html("")
<% if @mail.errors.any? %>
<% @mail.errors.full_messages.each do |message| %>
$("ul.errors").append($("<li />").html("<%= message.html_safe %>"))
<% end %>
<% else %>
$("#main-block").empty()
$("#main-block").html("Ziņa ir nosūtīta. Tuvākajā laikā sniegsim atbildi!")
<% end %>
之前我因为没有 .errors 方法而出错,但不知何故我修复了它,现在它绕过了所有验证并简单地接受了我的 save.js.erb
的 POST 请求编辑:奇怪的是,通过控制台似乎一切正常。
编辑 2:尝试将 form_for 从 :contact 更改为 @contact,现在我在 _save.js.erb
中得到 nil:NilClass 方法的未定义方法“错误”我认为 nilClass
问题可能是因为 deliver
方法没有 return 和 Contact
。而且我在任何地方都看不到您调用验证方法的地方。
大多数 AR 对象在 valid?
或 save
上调用验证。由于您没有在此处明确保存任何内容,因此我不确定何时会进行验证。但是您可以明确说明...例如
@contact = Contact.new(params[:contact])
@contact.deliver if @contact.valid?
这应该可以解决您遇到的 nilClass
问题,这可能是因为现在 @contact
是一个真正的“联系人”对象。此外,您正在显式调用验证方法。