【问题标题】:ruby on rails custom function validate and postruby on rails 自定义函数验证和发布
【发布时间】:2012-07-23 01:49:00
【问题描述】:

我创建了一个名为 Invitescontroller 和一个名为 invitemodel,并且我在控制器中创建了一个名为 request_invite 的新函数,我希望用户可以使用它来输入他们的电子邮件地址,并对其进行验证并且它不存在于邀请表中,然后将其发布到数据库中

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

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

【问题讨论】:

    标签: ruby-on-rails validation email post


    【解决方案1】:

    我会在我的回答中假设 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 =&gt; true 放入我们的 Invite 模型中,因此如果已存在具有相同受邀电子邮件值的 Invite 将无效。

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

    【讨论】:

      猜你喜欢
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2013-04-16
      相关资源
      最近更新 更多