1

我创建了一个controller命名的Invites和一个model命名的invite,我在控制器中创建了一个名为 request_invite 的新函数,我想用它让用户输入他们的电子邮件地址,验证它并且它在邀请表中不存在,然后将它发布到数据库

邀请控制器.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

邀请.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() 方法吗?

4

1 回答 1

2

我将在我的回答中假设 Invite 模型在数据库中有一个被邀请的电子邮件列。

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了 Invite 模型,因此如果已经存在具有相同邀请电子邮件值的 Invite,则它将无效。

我还想建议您将request_invite行动转变为create行动。我认为没有理由不这样做 - 你所做的正是创建一个新的邀请。如果你这样做,你可以省略:url => invite_request_pathfrom 构建器,因为当表单对象是一个新实例时,rails 默认会执行创建操作(如Invite.new

于 2012-07-24T17:29:32.180 回答