ruby on railsを勉強し始めで理解ができない部分があるため教えていただきたく質問を致しました。
現在作成中のものが、ユーザーを登録し、そのユーザー毎に企業の情報を登録していくものになっています。
deviseを用いたため、ユーザー登録などは実装済みです。
まずは関連付けを行わず、企業情報の管理のためcompanyモデルを作成し企業情報の登録などは実装してみました。
現状は誰かが登録した企業の情報が全員に見えてしまいます。
それをあるユーザーが登録した企業の情報はそのユーザーしか参照できなくするという修正を行うべく、1対多の関係にするため、belong_toとhas_manyを記載しました。
ruby
1class CreateCompanies < ActiveRecord::Migration 2 def change 3 create_table :companies do |t| 4 t.string :nameco 5 t.text :business 6 t.text :recruit 7 t.integer :income 8 t.text :wish 9 t.integer :wishpoint 10 t.integer :employee 11 t.string :advance 12 t.text :remarks 13 t.integer :users_id 14 t.timestamps 15 end 16 add_index :companies, :users_id 17 end 18end
class Company < ActiveRecord::Base belongs_to :user, foreign_key: 'users_id' # validates presence: true # validates :nameco, :business, presence: true, length: { maximum: 30 } end
class User < ActiveRecord::Base has_many :companies , dependent: :destroy validates :name, presence: true, length: { maximum: 50 } # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable end
ここまでの流れは合っていると思うのですが、この先が全くわからなくなってしまいました。
Companiesコントローラー
class CompaniesController < ApplicationController before_action :authenticate_user! PER = 7 def new @company = Company.new end def create @company = Company.new(create_params) if @company.save redirect_to root_url end end def show @company = Company.find(params[:id]) end def index @companies = Company.page(params[:page]).per(PER) end def edit @company = Company.find(params[:id]) end def update @company = Company.find(params[:id]) if @company.update_attributes(company_params) redirect_to @company flash[:success] = "企業情報を更新しました" else render'edit' end end private def create_params params.require(:company).permit(:nameco, :business) end def company_params params.require(:company).permit(:nameco, :business) end end
このコントローラーに@user= User.find(params[:id])
とつけ、newメソッドとcresteメソッドに@company=@user.companies.build
と入れ込むとIDが無い、メソッドがないというエラーが出てきてしまいます。
Ruby on Rails チュートリアルの13.1.3では、自動的にメソッドが使えるようになり、user_idは自動的に正しい値に設定されますと記載されていますが違いがよくわかりません。
SQLを覗いても、companiesテーブルにusers_idのデータが入っておらず、どこで追加すればいいのかとずっと考えています。
そもそも根本的に間違っているのか・・・。
大変長くなってしまいましたが、どなたか少しでも構いませんのでアドバイスなどいただけますでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/25 15:30
2018/02/25 23:10