2011-04-25 103 views
1

我需要對我的消息表單進行驗證,其中該用戶輸入電子郵件並且該電子郵件將該表單導向將接收消息的人員的ID。模型之外的導軌驗證

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 

謝謝!

---- ----編輯

正如我上文評論說,我加入到message.rb行

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

但做一些測試,我發現我做不到再次打開我的消息,我收到一條錯誤消息:

Validation failed: To Email possui formato incorreto 

任何線索?

回答

0

所以,如果我理解正確的,你,你只是不想電子郵件存儲在你的模型中,因爲沒有這樣的字段。

一種方法是使用form_tag而不是form_for來創建自定義表單。然後,您可以擁有所需的非模型屬性。

要檢查這是否是正確的郵件,您將在您的創建操作中收到參數並使用一種方法檢查這是否是有效的電子郵件。如果不是的話,如果你願意的話,它會刷新一個錯誤信息並重定向到一個頁面。如果沒有到對留言模型=方法

+0

感謝您的回答。其實,我想強制這個人在'text_field'中輸入一個電子郵件。表單的工作方式現在可行,但我不知道如何爲電子郵件格式添加驗證(如正則表達式)。 – Luk 2011-04-25 14:52:07

+0

是的,你可以這樣做,如上所述。你會得到寫在表單中的電子郵件。然後你有一個方法來檢查有效性。有效的電子郵件格式必須是「/^([^@s-+))((::[-a-z0-9]+\.++[a-z]{2,})$/i」。 – Spyros 2011-04-25 17:13:33

1

此行

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

應引發錯誤。所以我想,你已經有這種「虛擬屬性」,所以我們說這樣的事情:

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

謝謝!我用你的想法,並提出解決方案。 我在郵件上創建了一個'validates:to,:format => {:with => email_regex,:message =>「Email possui formato incorreto」}。rb和所有的工作。 如果有人需要,我使用的正則表達式是'email_regex =/\ A [\ w + \ - 。] + @ [a-z \ d \ - 。] + \。[a-z] + \ z/i' – Luk 2011-04-25 16:04:56