0

[:session] を params に追加することに混乱しています。また、私のウェブサイトが壊れているようです。誰かがこれが私に何をするのか説明してもらえますか?

class SessionsController < ApplicationController
  .
  .
  .
  def create
    user = User.find_by_email(params[:session][:email])
    if user && user.authenticate(params[:session][:password])
      sign_in user
      redirect_back_or user
    else
      flash.now[:error] = 'Invalid email/password combination'
      render 'new'
    end
  end
  .
  .
  .
end

エラーメッセージ:

1) 無効な情報での認証サインイン 失敗/エラー: before { click_button "サインイン" } NoMethodError: undefined method []' for nil:NilClass # ./app/controllers/sessions_controller.rb:7:increate' # (eval):2:in click_button' # ./spec/requests/authentication_pages_spec.rb:18:inblock (4 levels) in '

編集 8/2

この問題は、form_for から form_tag への切り替えに関連していると思います。適切に含める方法がわからなかったため、スイッチのセッションへの参照を失いました。誰かがこの問題について何かアドバイスがあれば、それは最もありがたいです. 代わりに params[:session][:email] にしたいという実際的な理由があるのか​​ 、それとも組織のためだけなのか疑問に思っています。

new.html.erb

<% provide(:title, "Sign in") %>
<h1>Sign in</h1>

<div class="row">
  <div class="span6 offset3">
    <%= form_tag sessions_path do %>

      <%= label_tag :email %>
      <%= text_field_tag :email %>

      <%= label_tag :password %>
      <%= password_field_tag :password %>

      <%= submit_tag "Sign in", class: "btn btn-large btn-primary" %>
    <% end %>

    <p>New user? <%= link_to "Sign up now!", signup_path %></p>
  </div>
</div>
4

3 に答える 3

1

[:session] ブラケットを削除してみてください。

于 2012-08-01T18:33:35.737 に答える
0

params[:session] が nil だと思うので、nil から [:email] を取得しようとすると、もちろん例外が発生するはずです。params[:session] ハッシュを定義するチュートリアルのコードがいくつかあるはずです。よく見えるようにしてください。コードを安定させるには、 params[:session] が常に定義されていることを確認するか、三項関数 params[:session] を使用してみてください。params[:session][:email]: ''

于 2012-08-01T18:43:31.657 に答える
0

ビューでこれを置き換えることができます:

<%= form_for :session, :url => sessions_path do %>

  <%= label_tag :email %>
  <%= text_field_tag :email %>

  <%= label_tag :password %>
  <%= password_field_tag :password %>

  <%= submit_tag "Sign in", class: "btn btn-large btn-primary" %>
<% end %>

form_tag は HTML フォーム タグのみを生成し、form_for は何かを記述するために使用されます。form_for で作成されたフォームのフィールドのすべての入力は、次のような名前になりますuser_session[email]。したがって、フォームを送信すると、コントローラーで次のようになりますparams[:user_session][:email]

于 2012-08-02T17:15:27.703 に答える