0

非常に初歩的なサインインフォームを作成しようとしています。パスワードやユーザー名はありません。ユーザー名のテキストフィールドと送信ボタンのみ

コードは次のとおりです。

<%= form_for :current_user, url: { :controller => 'sessions', :action=>'new' } do |f| %>
<p id='name'>Name:<%= f.text_field :current_user, placeholder: 'First Last', :id => 'current_user' %></p>
<%= f.submit 'Submit', :class => 'btn btn-primary' %>

レールの名前を送信すると、このエラーが表示されます

ActiveRecord::RecordNotFound in SessionsController#new
Couldn't find User without an ID

ただし、含まれているため、正しいパラメーターを受け取ります

"current_user"=>{"name"=>"John Doe"}

これは私が受け取りたいものですが、私が問題を抱えているのは、実際に current_user を John Doe に設定するアクションを適切に定義することです。

これが私がコントローラーに持っているものです

class SessionsController < ApplicationController

def new
  @current_user = User.find(params[:name])
  redirect_to '/calendar'
end

end

私がやりたいことは、変数 @current_user を John Doe という名前のデータベースのユーザーに設定することだけです。だから私がしなければならないことは、提出された名前 John Doe をデータベース内の John Doe と照合することです。しかし、これを行う方法がわからないので、アドバイスは素晴らしいです。ありがとう

4

1 に答える 1

1

パラメータを誤って参照しているため、メソッドにanilを渡しています。User.findname

代わりに行う必要があるのは、次のいずれかです。

User.find(params[:current_user])

また

User.find_by_name(params[:current_user][:name])

使用しているコード:

User.find(params[:name])

... は無効です。paramsハッシュには と呼ばれる別のハッシュが含まれcurrent_userており、そこにnameパラメーターが表示されるため、次のようになります。

params[:current_user][:name]
         \/            \/
'current_user' => { 'name' => 'John Doe' }
于 2013-10-16T18:51:38.917 に答える