前提・実現したいこと
現在user_idとcompanyモデルの紐付けを行なっています。目的は、userでログインした際に、user_idと関係ない記事を表示や編集させたくないためです。参考書等を読んだのですが、current_userでエラーが出てしまいます。
どこかソースコードに間違いがあるのでしょうか?
よろしくお願い致します。
該当のソースコード
migrate
120190125160142_add_user_id_to_companies.rb 2class AddUserIdToCompanies < ActiveRecord::Migration[5.2] 3 def change 4 add_column :companies, :user_id, :integer 5 end 6end
model
1 belongs_to :user 2 has_one :company
compnaycontroller
1class CompaniesController < ApplicationController 2 before_action :authenticate_user! 3 4 def index 5 @companies = Company.where(user_id: current_user.id) 6** 以下の#場合にエラーが発生します** 7 #@companies = current_user.companies 8 add_breadcrumb '会社情報一覧', :companies_path 9 end 10 11 def show 12 @company = Company.find(params[:id]) 13 14 add_breadcrumb '会社情報一覧', :companies_path 15 add_breadcrumb '会社情報詳細', :company_path 16 end 17 18 def new 19** 以下の#場合にエラーが発生します** 20 #@company = Company.new(company_params.marge(user_id: current_user.id)) 21 #@company = current_user.company.new(company_params) 22 23 add_breadcrumb '会社情報一覧', :companies_path 24 add_breadcrumb '会社情報新規登録', :new_company_path 25 end 26 27 def create 28 @company = Company.new(company_params) 29 if @company.save 30 # redirect 31 redirect_to companies_path 32 else 33 render 'new' 34 end 35 end 36 37 def edit 38 @company = Company.find(params[:id]) 39** 以下の#場合にエラーが発生します** 40 #@company = current_user.company.find(params[:id]) 41 add_breadcrumb '会社情報一覧', :companies_path 42 add_breadcrumb '会社情報編集', :edit_company_path 43 end
全般にスペルミスや単数形・複数形の混在なども多いようですが、そのあたりの見直しはなされましたか?
すみません。自分で後ほど確認しますが、もし宜しければ具体的にどの点かをお伺いする事は出来ますでしょうか?
mergeが「marge」となっていたり、has_oneなのに「companies」を呼んでいる箇所があったりします。
あと、Railsのリレーション上は、Userが「has_one :company」ということで間違いないですか?
はい。実はアソシエーションについて最近勉強を始めたばかりで無知なところが多くて。ご指摘ありがとうございました。
後ほど修正してみようと思いますが、通常であれば上記の変更で動くはずですか?
indexは通るようなのですが、newやeditはcurrent_userを指定すると動かないようです。