のPersonを見つけることができませんでした。以前はweb用に何も開発していませんでしたが、今は既存のデータベースのデータを表示する簡単なアプリケーションを作成する必要があります。'login' =
それぞれのユーザーはそれぞれのデータのみを表示する必要があります。そのユーザーと他のテーブルに参加するクエリを実行するには、何らかの認証方法が必要です。私は事をシンプルに保つように努力しました、ユーザーがしなければならないのは、Pessoaテーブルの主キーであるユーザー名です(パスワードなし、電子メール確認なし、何もありません)。
私はRailsGuidesについてのいくつかのチュートリアルを読んでおり、www.rubypigeon.com/posts/how-to-implement-simple-authentication-withde-devise/で認証していますが、私のログインが機能する。
ここに私のコードは、これまでのところです:
にHomeController:
class HomeController < ApplicationController
def index
end
def login
@user = Pessoa.new
end
def sign_in
@user = Pessoa.find(params[:id])
if @user
session.clear
session[:user_id] = @user.id
render '/'
else
@error = 'Username or password was incorrect'
erb :sign_in
end
end
def sign_out
session.clear
render '/'
end
helper_method :current_user
def current_user
if session[:user_id]
Pessoa.find (session[:user_id])
else
nil
end
end
end
ビュー/ホーム/ login.html.erb:
<%= form_for @user, url: home_sign_in_path do |f| %>
<div class="field">
<%= f.label :"digite seu login" %>
<%= f.text_field :id %>
</div>
<div class="actions">
<%= f.submit :entrar %>
</div>
<% end %>
routes.rbを
Rails.application.routes.draw do
root 'home#index'
get 'home/index'
get 'home/login', to: 'home#login'
post 'home/sign_in', to: 'home#sign_in'
post 'home/sign_out', to: 'home#sign_out'
resources :pessoas
end
/views/home/index.html.erbには主キーが変更されなければならなかった理由は、静的なHTMLのものの多くは、その上の唯一のRubyコードは、私は、PostgreSQLのレガシーテーブルで働いている
<%= link_to 'Login', home_login_path %>
Pessoa.rb
class Pessoa < ApplicationRecord
self.table_name = 'pessoa'
self.primary_key = 'login'
end
である、というのです。
localhost:3000/home/loginにアクセスしてログインすると、this というエラーメッセージが表示されます。変わった部分は、私がコンソール上でエラーを出すのと同じ行を実行すれば、うまく動作します。
私が言ったように、私は一般的にRailsとWeb開発の新機能ですから、私は見た目には分かりません。どんな助けもありがとう。
Btw、リソース名は気にしないでください。 "Pessoa"は私の母国語であるポルトガル語の "Person"を意味します。
development.logは:
Started GET "/home/login" for 127.0.0.1 at 2017-06-06 20:22:45 -0300
Processing by HomeController#login as HTML
Rendering home/login.html.erb within layouts/application
Rendered home/login.html.erb within layouts/application (12.4ms)
Completed 200 OK in 1504ms (Views: 1369.5ms | ActiveRecord: 0.0ms)
Started POST "/home/sign_in" for 127.0.0.1 at 2017-06-06 20:22:50 -0300
Processing by HomeController#sign_in as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"Jzt0Yeven91Kl8DrfjpJa8I9PJjr7SzKmE43lwprjlopV7l+zFU6EUjUgAiKYJhzemm7xu8NGfiPj3E5h5EiYw==", "pessoa"=>{"id"=>"gabrielbrito"}, "commit"=>"entrar"}
[1m[36mPessoa Load (1.5ms)[0m [1m[34mSELECT "pessoa".* FROM "pessoa" WHERE "pessoa"."login" = $1 LIMIT $2[0m [["login", nil], ["LIMIT", 1]]
Completed 404 Not Found in 9ms (ActiveRecord: 1.5ms)
ActiveRecord::RecordNotFound (Couldn't find Pessoa with 'login'=):
app/controllers/home_controller.rb:10:in `sign_in'
Started PUT "/__web_console/repl_sessions/ed3bb60f3a72a0c0b0c951fa03c0f23d" for 127.0.0.1 at 2017-06-06 20:22:56 -0300
Started PUT "/__web_console/repl_sessions/ed3bb60f3a72a0c0b0c951fa03c0f23d" for 127.0.0.1 at 2017-06-06 20:22:58 -0300
Started PUT "/__web_console/repl_sessions/ed3bb60f3a72a0c0b0c951fa03c0f23d" for 127.0.0.1 at 2017-06-06 20:23:04 -0300
[1m[36mPessoa Load (1.2ms)[0m [1m[34mSELECT "pessoa".* FROM "pessoa" WHERE "pessoa"."login" = $1 LIMIT $2[0m [["login", "gabrielbrito"], ["LIMIT", 1]]
Started GET "/home/login" for 127.0.0.1 at 2017-06-06 21:27:45 -0300
Processing by HomeController#login as HTML
Rendering home/login.html.erb within layouts/application
Rendered home/login.html.erb within layouts/application (6.2ms)
Completed 200 OK in 1626ms (Views: 1152.5ms | ActiveRecord: 7.5ms)
Started POST "/home/sign_in" for 127.0.0.1 at 2017-06-06 21:27:52 -0300
Processing by HomeController#sign_in as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"q2ffWM1gqaXfCrsFm7KlGKwR/iTDoQBflquem2BKSaeMyKBiIaUrtnIkoEXNztUWRasIGGg0qZZxpdYao8xb9Q==", "pessoa"=>{"id"=>"gabrielbrito"}, "commit"=>"entrar"}
[1m[36mPessoa Load (2.8ms)[0m [1m[34mSELECT "pessoa".* FROM "pessoa" WHERE "pessoa"."login" = $1 LIMIT $2[0m [["login", "gabrielbrito"], ["LIMIT", 1]]
Completed 500 Internal Server Error in 23ms (ActiveRecord: 2.8ms)
NoMethodError (undefined method `empty?' for nil:NilClass):
app/controllers/home_controller.rb:15:in `sign_in'
EDIT:、@ジェリーの助けのおかげで解決しました。
エラーとあなたのコントローラされていますあなたのコードは '@user = Pessoa.find(params [:id])'を持っていますが、エラーは '@user = Pessoa.find(params [:pessoa] [:id])'となります。現在のコードでもエラーが表示されますか? – Gerry
コンソール/ログに出力を表示できますか? – Gerry
私は悪いですが、以前は '@user = Pessoafind(params [:id])'を試しましたが、コンソールで入力してもそれは無かったので、 '@user = Pessoa.find(params [:pessoa] [ :id]) '、新しいコードは、コンソールが私にテーブルのレコードを表示しても、私に同じエラーを与えます。 EDIT:ログで更新 –