前提
学習開始5ヶ月の初心者です。
現在、RailsにてStripeを使用し、サブスクリプション機能の実装中です。
決済機能は実装完了したのですが、ユーザーへサブスクを登録済み、未登録で登録ページへの条件分岐をさせたく、if文で記述をしておりましたが、下記エラーが発生いたしました。
NoMethodError in Gyms#index Showing /Users/aberyou/projects/gym_search/app/views/layouts/_header.html.erb where line #55 raised: undefined method `user_id' for nil:NilClass
実現したいこと
ユーザーがサブスク登録済みであれば有償版へのボタンは表示させない、未登録であれば表示させる。
該当のソースコード
下記をレンダリングしてindex.html.erbのヘッダーとして表示させています。
_header
Gymscontroller
class GymsController < ApplicationController def index @gyms = Gym.all end def show @gym = Gym.find(params[:id]) gon.lat = @gym.lat.to_f gon.lng = @gym.lng.to_f end def search @gyms = Gym.search(params[:keyword]) end end
Teamcontroller
class TeamsController < ApplicationController def new @user = current_user @team = Team.find_by(user_id: @user.id) end def create @team = Team.new(user_id: current_user.id) customer = Stripe::Customer.create({ source: params[:stripeToken] }) subscription = Stripe::Subscription.create({ customer: customer.id, plan: "price_1LNWJtCUmfQ7g7y2yJZWEbuo" }) @team.plan_id = "price_1LNWJtCUmfQ7g7y2yJZWEbuo" @team.customer_id = customer.id @team.stripe_subscription_id = subscription.id @team.active_until = Time.zone.at(subscription.current_period_end) if @team.save flash[:success] = "成功しました" redirect_to root_url else render 'new' end end def destroy @team = Team.find_by(user_id: current_user.id) deleting_stripe_subscription = Stripe::Subscription.retrieve(@team.stripe_subscription_id) if current_user.unsubscribe deleting_stripe_subscription.delete flash[:notice] = "解約に成功しました" redirect_to root_url else render 'new' end end end
試したこと
<% if @team.user_id == current_user.id %>
上記の記述にて@team内にuser_idがないというエラーかと認識しております。(間違っていたすみません)
「インスタンス変数が良くない?」と思い、team.user_idにしても見ましたが、変わらずでした。
何度も見受けしているエラーなので初歩的な部分かと存じますが、貴重なご意見賜れませんでしょうか。
0 コメント