答えた。投稿の終わりを参照してください。
私は主にJava開発者であり、RubyonRailsはかなり初めてです。railstutorial.orgのチュートリアルを無事に完了しました。だから私はこれを一度動作させました。チュートリアルを2回実行し始めたときに問題が発生しましたが、今回は認証をSorcerygemに置き換えようとしています。そのための私の主な参照は、railscasts.orgのエピソード#283でした。一部は機能していましたが、サインインしようとすると、次のようなエラーが発生します。
SessionsController#createのActiveRecord :: PreparedStatementInvalid
[:email] =:loginの:emailの値がありません
これは非常に具体的ですが、多くの場所に現れる非常に一般的な単語であるため、検索するのは困難でした。元のチュートリアルを機能させたときと同じようにやっていると思います。以下は私のviews/sessions / new.html.erbで、元のチュートリアルとほぼ同じです。
<% provide(:title, "Sign in") %>
<h1>Sign in</h1>
<div class="row">
<div class="span6 offset3">
<%= form_for(:session, url: sessions_path) do |f| %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.check_box :remember_me %>
<%= f.label :remember_me %>
<%= f.submit "Sign in", class: "btn btn-large btn-primary" %>
<% end %>
<p>New user? <%= link_to "Sign up now!", signup_path %></p>
</div>
</div>
そして、これが私のsessions_controller.rbのcreateメソッドです。これは、魔術のためにチュートリアルとは少し異なりますが、params参照がチュートリアルと同じように機能しない理由はわかりません。
def create
user = login(params[:session][:email], params[:session][:password])
if user
redirect_back_or_to root_url, :notice => "Logged in!"
else
flash.now[:error] = 'Invalid email/password combination' # Not quite right!
render 'new'
end
end
Railsキャストはparams[:email]を使用しますが、これは彼がform_forではなくform_tagを使用し、使用するparamを変更したためです。
私はここで本当に迷子になっています。チュートリアルと同じように機能しない理由がわかりません。どんな助けでも大歓迎です。追加情報を提供する必要があるかどうかをお知らせください。ありがとう。
編集:
上記の完全なエラーを追加しました。ソーサリーのログイン方法や私のデータベースに問題があるに違いありません。パラメータは正常に処理されています。これが完全なスタックトレースです(コードの私の部分に戻ります。それを超えると本当に長すぎます)。
スタックトレース:
activerecord(3.2.11)lib / active_record / sanitization.rb:141:in `block in replace_named_bind_variables '
activerecord(3.2.11)lib / active_record / sanitization.rb:135:in `gsub '
activerecord(3.2.11)lib / active_record / sanitization.rb:135:in `replace_named_bind_variables '
activerecord(3.2.11)lib / active_record / sanitization.rb:115:in `sanitize_sql_array '
activerecord(3.2.11)lib / active_record / sanitization.rb:28:in `sanitize_sql_for_conditions '
activerecord(3.2.11)lib / active_record / ratio / query_methods.rb:324:in `build_where '
activerecord(3.2.11)lib / active_record / ratio / query_methods.rb:136:in `where'
activerecord(3.2.11)lib / active_record / querying.rb:9:in `where'
ソーサリー(0.7.13)lib / sorcery / model / adapters / active_record.rb:32:in `find_by_credentials '
ソーサリー(0.7.13)lib / sorcery / model.rb:108:in `authenticate '
ソーサリー(0.7.13)lib / sorcery / controller.rb:33:in `login '
app / controllers / sessions_controller.rb:8:in `create '
私は自分の質問にすぐに答えるには新しすぎると思います。自分で修正しました:
sorcery.rbで、私は持っていました:
user.username_attribute_names ='[:email]'
どうやら、引用符はそこにあるべきではありません。ファイル内のコメントに戸惑いました。その変更を行った後、変更を有効にするためにサーバーを再起動する必要がありました。