###前提・実現したいこと
練習として、簡単なSNSアプリケーションを作成しています。
session[:login].idを書くとエラーが出ない場所と出る場所があります。
###発生している問題・エラーメッセージ
NoMethodError in MembersController#show undefined method `id' for #<Hash:0x9a9bdc8> Rails.root: C:/Users/ide/Desktop/play/RoR_plan/miniSNS2 Application Trace | Framework Trace | Full Trace app/controllers/members_controller.rb:7:in `show'
###該当のソースコード
class MembersController < ApplicationController def show ###CHECK_2 puts session[:login].id #=> ERROR if !checklogin? then return end @me = me? @member = Member.find(params[:id]) frs =Friend.where(:member_id => params[:id].to_i) frlist = '(' frs.each do |fr| frlist += fr.friend_id.to_s + "," end frlist += '0)' query = "select * from members where id in " + frlist @friends = Member.find_by_sql(query) frs =Friend.where(:friend_id => params[:id].to_i) frlist = '(' frs.each do |fr| frlist += fr.member_id.to_s + "," end frlist += '0)' query = "select * from members where id in " + frlist @friended = Member.find_by_sql(query) @isFr = Friend.where(:member_id => session[:login].id, :friend_id => params[:id].to_i).count > 0 @isFded = Friend.where(:friend_id => session[:login].id, :member_id => params[:id].to_i).count > 0 respond_to do |format| format.html # show.html.erb format.json { render json: @member } end end # login def login params.permit! @msg = "get" @member = Member.new if request.post? then @member = Member.new(params[:member]) record = Member.find_by_user(params[:member][:user]) if record == nil then @msg = "record is nil." @member.errors.add('user',"not registrated!") else if record.pass != params[:member][:pass] then @msg = "password is worng." @member.errors.add('pass','password is wrong!') else @msg = "good!" @member = record session[:login] = record ###CHECK_1 puts session[:login].id #=> NO ERROR redirect_to '/members/' + record.id.to_s end end end end end
###試したこと
SNSのログイン機能を作っています。
ユーザー名とパスワードを入力し、submitボタンを押すと上のコードのloginアクションが呼び出され、その後、showアクションが実行されます。
loginアクションの「###CHECK_1」で示している場所で、session[:login].idを確認するとちゃんとidが取得できるのですが、showアクションの「###CHECK_2」で示している場所では上記したエラーが発生してしまいます。
ちなみに、puts session[:login]とすれば、どちらの場所でも
{"id"=>1, "user"=>"sayama", "pass"=>"XXX", "name"=>"sayama kitahiro", "mail"=>"sayama_kitahiro@gmail.com", "admin"=>true, "created_at"=>"2016-08-15…
と表示されて、正常なように思えます。
###補足情報(言語/FW/ツール等のバージョンなど)
Windows 7
Ruby 2.1.9p490
Rails 4.2.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/16 21:48