I have a website I am making that tracks a users companies through employments. I need to know what I am doing wrong because when I make a new user company the user doesn't know about it.
companies_controller.rb
class CompaniesController < ApplicationController
# GET /companies
# GET /companies.json
def index
@companies = current_user.companies
respond_to do |format|
format.html # index.html.erb
format.json { render json: @companies }
end
end
# GET /companies/1
# GET /companies/1.json
def show
@company = Company.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @company }
end
end
# GET /companies/new
# GET /companies/new.json
def new
@company = Company.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @company }
end
end
# GET /companies/1/edit
def edit
@company = Company.find(params[:id])
end
# POST /companies
# POST /companies.json
def create
@company = Company.new(params[:company])
current_user.employments.create!(company_id: @company.id)
respond_to do |format|
if @company.save
format.html { redirect_to @company, notice: 'Company was successfully created.' }
format.json { render json: @company, status: :created, location: @company }
else
format.html { render action: "new" }
format.json { render json: @company.errors, status: :unprocessable_entity }
end
end
end
# PUT /companies/1
# PUT /companies/1.json
def update
@company = Company.find(params[:id])
respond_to do |format|
if @company.update_attributes(params[:company])
format.html { redirect_to @company, notice: 'Company was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @company.errors, status: :unprocessable_entity }
end
end
end
# DELETE /companies/1
# DELETE /companies/1.json
def destroy
@company = Company.find(params[:id])
@company.destroy
respond_to do |format|
format.html { redirect_to companies_url }
format.json { head :no_content }
end
end
end
The problem is within your create action, specifically the line
current_user.employments.create!(company_id: @company.id)
this is executed before the company record is saved so it doesn't have an id (== nil). Just move that line after
if @company.save
and it should attach it to the current_user via the :through relationship.