1

私はRuby on Railsの初心者で、ばかげた質問があります:私のsession_controllerには

def create
    user = User.find_by_email(params[:email])
    if user && user.authenticate(params[:password])
      session[:user_id] = user.id
      redirect_to root_path, :notice => "Logged in!"
    else
      flash.now.alert = "Invalid email or password"
      render "new"
    end
  end

ルートでは、「/signin」に一致しています。「sessions#new」

私が持っている new.html.haml

  = simple_form_for :session do |f|
    = f.input :email
    = f.input :password
    = f.button :submit, 'Sign in!'

「サインイン」ボタンを押すと、メソッド「作成」が呼び出されると予想されますが (ユーザーモデルでの動作)、デバッグで「新しい」メソッドが表示され、電子メールとパスワードを入力せずに「authenticity_token」が表示されます。誰かが私に何が起こるか説明してもらえますか? メソッド「new」がいつ呼び出され、次に他のメソッドが呼び出されるのかわかりません。

4

2 に答える 2

5

この動作はsimple_form. アクションが呼び出される URL を指定せず、そのパスを推測するモデルを渡さないため、url_for()空のハッシュでメソッドが呼び出されることになります。この呼び出しの結果は現在のページです。これは明らかに、フォームが表示された場所と同じパスですがPOST、HTML 動詞として を使用しています。

sessions_pathyour の代わりに yourを呼び出すにnew_session_pathは、次のようにします。

= simple_form_for :session, url: :sessions do |f|

を介して処理されるためurl_for、指定するのと実質的に同じurl: sessions_pathですが、あなたを魔術師にしています。

于 2012-07-12T19:59:19.103 に答える
2

私は erb を使用している haml を使用していませんが、同様に動作すると思われます。erb では、フォームは次のようにアクションを呼び出す必要があります。

    form_for :session, :url => {:action => "create"} do |f|

これにより、セッション コントローラーの create メソッドが呼び出されます。だから私はhamlがそうだろうと思います

    simple_form_for :session, :url => {:action => "create"} do |f|

お役に立てれば

于 2012-07-12T20:00:34.597 に答える