未定义的方法`before_create'

时间:2012-11-22 05:31:34

标签: ruby-on-rails ruby-on-rails-3.2

我有一个用户模型和一个公司模型链接如下:

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

class Company < ActiveRecord::Base
   has_many :users  
 end

在登录页面上,我希望用户设置他的信息(邮件,密码)和他的公司信息(几个字段)。所以我的表格看起来像这样:

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

        <%= f.input :email, :required => true, :placeholder => "user@domain.com" %>
        <%= 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 %>

我的用户模型有company_id:integer字段。从逻辑上讲,当我登录用户时,首先要做的是在用户之前创建公司,然后向用户创建模型提供相应的company_id。所以我写了这个:

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

问题是:访问/ users / new时出现此错误:

undefined method `before_create' for UsersController:Class

出了什么问题?我检查过,before_create没有被弃用,我在Rails 3.2.8中。这对我的create_company方法来说可能是愚蠢的,但我无法理解为什么......

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

before_create是一个属于ActiveRecord的钩子方法

before_filter是一个属于Controller的钩子方法。

因此,我建议您在明确哪些内容后重新构建代码。 ^ _ ^