1

controller名前付きInvitesmodel名前付きを作成しinvite、request_inviteという名前のコントローラーに新しい関数を作成しました。これを使用して、ユーザーがメールアドレスを入力し、検証し、招待テーブルに存在しないことを確認してから、データベース

invokes_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()メソッドを使用しますか?

4

1 に答える 1

2

私の回答では、InviteモデルのDBにinvited_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、Inviteモデルを挿入したため、同じinvited_email値を持つInviteがすでに存在する場合は無効になります。

request_inviteまた、行動を行動に変えることをお勧めしますcreate。そうしない理由はわかりません。あなたがしているのは、まさに新しい招待状の作成です。これを行う場合、フォームオブジェクトが新しいインスタンス(のように):url => invite_request_pathである場合、railsはデフォルトでcreateアクションに移動するため、fromビルダーからを省略できます。Invite.new

于 2012-07-24T17:29:32.180 に答える