Kevin Smouts
Kevin Smouts

Reputation: 146

undefined method `before_create'

I have a User model and a Company model linked like this:

class User < ActiveRecord::Base
  belongs_to :company
  accepts_nested_attributes_for :company
end

class Company < ActiveRecord::Base
   has_many :users  
 end

On the sign in page, I want the user to set up both his info (mail, password) and his company info (several fields). So my form looks like this:

<%= simple_form_for @user, :html => { :class => 'form-horizontal' } do |f| %>

        <%= f.input :email, :required => true, :placeholder => "[email protected]" %>
        <%= f.input :password, :required => true %>
        <%= f.input :password_confirmation, :required => true %>

<h2>Company info</h2>
<%= simple_fields_for :company, :html => { :class => 'form-horizontal' } do |fa| %>
    <%= fa.input :name %>
    <%= fa.input :url %>
    <%= fa.input :description, :as => :text, :input_html => { :cols => 60, :rows => 3  } %>
    <%= fa.input :logo %>
    <%= fa.input :industry %>
    <%= fa.input :headquarters %>
<% end %>

        <div class="form-actions">
            <%= f.submit nil, :class => 'btn btn-primary' %>
            <%= link_to t('.cancel', :default => t("helpers.links.cancel")),
            root_url, :class => 'btn' %>
        </div>

<% end %>

My user model has a company_id:integer field. So logically, when I sign in the user, the first thing to do is to create the Company before the User and then give to the user creation model the appropriate company_id. So I wrote this:

class UsersController < ApplicationController
  before_create :create_company

  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      redirect_to root_url, :notice => "Registration successful."
    else
      render :action => 'new'
    end
  end

private

  def create_company
    @company = Company.new(params[:company])
    if @company.save
      self.company_id = @company.id
    else
      render :action => 'new'
    end
  end

end

Problem is: when accessing /users/new I get this error:

undefined method `before_create' for UsersController:Class

What's going wrong? I checked, before_create has not been deprecated, I'm in Rails 3.2.8. This is probably something stupid with my create_company method but I can't figure why...

Thanks a lot for helping!

Upvotes: 2

Views: 3611

Answers (1)

Siwei
Siwei

Reputation: 21549

before_create is a hook method belonging to ActiveRecord

before_filter is a hook method belonging to Controller.

so I suggest you to re-build your code after you make clear which is which. ^_^

Upvotes: 2

Related Questions