1

アップデート:


以下の問題は、ユーザーを認証する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"=>"onebroadway@test.com"}, "commit"=>"Submit"}
Completed   in 35ms
4

1 に答える 1

0

before_filterを引き続き使用できます。いくつかのオプションを渡すだけで、特定のアクションでのみアクティブになるか、フォームで使用しているコントローラーアクションの代わりにskip_before_filterを使用できます。

于 2012-05-10T17:22:32.430 に答える