2012-05-10 22 views
1

UPDATE:2つの形式


以下の問題は、ユーザーを認証しbefore_filterを持っていることから生じています。


同じページに2つのフォームがあります。それぞれ異なる2つのform_forがあります。彼らは次のようであり、工夫/セッション/新しいビューの両方で、次のとおりです。

%h2 Sign in 
= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| 
    %div 
    = f.label :email 
    %br/ 
    = f.email_field :email 
    %div 
    = f.label :password 
    %br/ 
    = f.password_field :password 
    - if devise_mapping.rememberable? 
    %div 
     = f.check_box :remember_me 
     = f.label :remember_me 
    %div= f.submit "Sign in" 
= render :partial => "devise/shared/links" 

=form_for BetaSignUp.new do |f| 
    .field 
    = f.label :email, "Your Email:" 
    = f.text_field :email 
    .actions 
    = f.submit 'Submit' 

しかしbetasignupフォームに新しい電子メールを入力するとき、私は同じを持っている場合それがないとして、それがデータベースに保存されません。 views/beta_sign_ups/newビューにフォームを作成します。どうしてこれなの?コントローラーの1つまたはおそらくルートで何かをする必要がありますか?

beta_sign_ups_controller:

class BetaSignUpsController < ApplicationController 
    def new 
    @beta_sign_up = BetaSignUp.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @beta_sign_up } 
    end 
    end 

    def create 
    @beta_sign_up = BetaSignUp.new(params[:beta_sign_up]) 

    respond_to do |format| 
     if @beta_sign_up.save 
     format.html { redirect_to root_path, notice: 'Thank you for signing up. You will be notified when we expand the beta group.' } 
     format.json { render json: @beta_sign_up, status: :created, location: @beta_sign_up } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @beta_sign_up.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
end 

betasignupsフォームのHTML出力:

<form accept-charset="UTF-8" action="/beta_sign_ups" class="new_beta_sign_up" id="new_beta_sign_up" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" value="K4wlzIZ958PdaC91vV4NMu4PLm3TF+yVebN0ll2VuoI="></div> 
<div class="field"> 
<label for="beta_sign_up_email">Your Email:</label> 
<input id="beta_sign_up_email" name="beta_sign_up[email]" size="30" type="text"> 
</div> 
<div class="actions"> 
<input name="commit" type="submit" value="Submit"> 
</div> 
</form> 

そしてbetasignupsフォームに提出した後、サーバログからの出力:

Started POST "/beta_sign_ups" for 127.0.0.1 at 2012-05-10 11:36:17 -0400 
    Processing by BetaSignUpsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"K4wlzIZ958PdaC91vV4NMu4PLm3TF+yVebN0ll2VuoI=", "beta_sign_up"=>{"email"=>"[email protected]"}, "commit"=>"Submit"} 
Completed in 35ms 
+0

2番目のフォームのhtml出力とは何ですか? beta_sign_upsコントローラをお持ちですか? – bcd

+0

これらを含めるように編集された質問。 – John

+0

ああ、問題は、ユーザーを認証するbefore_filterを持つことにあります – John

答えて

0

ますbefore_filterを使用することはできますが、いくつかのオプションを渡すだけで、それが動作するようになります特定のアクションを実行するか、それを使用してください。あなたのフォームで使用しているコントローラアクションの代替skip_before_filter。

関連する問題