パーフェクトRuby on Railsを見ながら勉強しているのですが、
postのViewにuserテーブルから
・nickname(TwitterAPIより取得)
・image_url(TwitterAPIより取得)
を表示させようとしています。
しかし、
undefined method `nickname' for nil:NilClass
というエラーがでてしまいます。
どこが問題になっているのでしょうか?
/posts/show.html.erb
lang
1<div class="page-header"> 2 <h1> 3 <%= @post.owner_name %>の投稿 4 </h1> 5</div> 6 7 <div class="panel panel-default"> 8 <div class="panel-heading"> 9 投稿者 10 </div> 11 <div class="panel-body"> 12 <%= link_to("https://twitter.com/#{@post.owner.nickname}") do %> 13 <%= image_tag '@post.owner.image_url' %> 14 <%= "@#{@post.owner.nickname}" %> 15 <% end %> 16 </div> 17 </div> 18 19 <div class="panel panel-default"> 20 <div class="panel-heading"> 21 コメント 22 </div> 23 <div class="panel-body"> 24 <%= @post.comment %> 25 </div> 26 </div>
/models/post.rb
lang
1class Post < ActiveRecord::Base 2 belongs_to :owner, class_name: 'User' 3 validates :comment, length: { maximum: 140 }, presence: true 4 validates :owner_name, presence: true 5 6end
/models/user.rb
lang
1class User < ActiveRecord::Base 2 3has_many :created_posts, class_name: 'Post', foreign_key: :owner_id, dependent: :nullify 4 5def self.find_or_create_from_auth_hash(auth_hash) 6 provider = auth_hash[:provider] 7 uid = auth_hash[:uid] 8 nickname = auth_hash[:info][:nickname] 9 image_url = auth_hash[:info][:image] 10 11 User.find_or_create_by(provider: provider, uid: uid) do |user| 12 user.nickname = nickname 13 user.image_url = image_url 14 end 15 end 16 17end
/migrate/post
lang
1class CreatePosts < ActiveRecord::Migration 2 def change 3 create_table :posts do |t| 4 t.integer :owner_id 5 t.string :owner_name 6 t.string :image, null: false 7 t.string :comment, null: false 8 9 t.timestamps 10 end 11 12 add_index :posts, :owner_id 13 end 14end 15
/migrate/user
lang
1class CreateUsers < ActiveRecord::Migration 2 def change 3 create_table :users do |t| 4 t.string :provider, null: false 5 t.string :uid, null: false 6 t.string :nickname, null: false 7 t.string :image_url, null: false 8 9 t.timestamps 10 end 11 12 add_index :users,[:provider, :uid], unique: true 13 end 14end 15
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。