2012-07-24 78 views
1

我已創建一個controller名爲Invites和一個名爲invitemodel,我已經創造了一種我要使用用戶輸入他們的電子郵件地址控制器命名request_invite一個新的功能,驗證它而且它不會在邀請表中存在,然後將其上傳到數據庫Ruby on Rails的定製功能驗證和發佈

invites_controller.rb

class InvitesController < ApplicationController 

    def request_invite 
     render_404 unless request.xhr? 

     @email = params[:get_invited_email] 

     if @email 
      flash[:notice] = "msg + insert" 
     else 
      flash[:notice] = "msg" 
     end 

    end 

end 

invite.rb

class Invite < ActiveRecord::Base 

end 

我還沒有添加的路由資源文件

形式

<%= form_tag(invite_request_path, :method => "post", :id => "landing_request_invite_form") do %> 
    <%= text_field_tag 'get_invited_email', nil, :placeholder => 'Enter your email address' %> 
    <%= submit_tag 'Get Invited', :id => "get_invited_btn" %> 
<% end %> 

的JavaScript

$("#landing_request_invite_form").submit(function(e){ 
    e.preventDefault(); 
    var form = $(this); 
    var url = form.attr("action"); 
    var formData = form.serialize(); 
    $.post(url, formData, function(html) { 
     console.log('request done'); 
    }); 
    return false; 
    }); 

我怎麼能檢查電子郵件不存在?我使用.find()方法嗎?

回答

2

我會在我的答案中假設Invite模型在DB中有一個invite_email列。

class Invite < ActiveRecord::Base 
    validates :invited_email, :uniqueness => true 
end 

class InvitesController < ApplicationController 
    def request_invite 
     render_404 unless request.xhr? 

     @invitation = Invite.new(params[:invite]) 
     if @invitation.save 
      flash[:notice] = "msg + insert" 
     else 
      flash[:notice] = "msg" 
     end 
    end 
end 

<%= form_for Invite.new, :url => invite_request_path, :id => "landing_request_invite_form" do |f| %> 
    <%= f.text_field :invited_email, :placeholder => 'Enter your email address' %> 
    <%= f.submit 'Get Invited', :id => "get_invited_btn" %> 
<% end %> 

簡要說明:

@invitation.save經過驗證,如果對象是無效返回false,因爲我們在我們的邀請模型把validates :invited_email, :uniqueness => true如果用相同INVITED_EMAIL值已經存在邀請它不會是有效的。

我還想建議您將request_invite動作更改爲create動作。我認爲沒有理由不 - 你正在做的就是創建一個新的邀請。如果這樣做,則可以省略來自構建器的:url => invite_request_path,因爲當表單對象是新實例時,rails會默認進入創建操作(如Invite.new