3

我有 2 个模型用户和公司。(我正在为用户使用设计)

  • 用户属于公司。
  • 公司有很多用户。

我的用户模型包括一个 client_id 列。

目前,用户注册并被定向到我想在其中创建关系的 new_company_path。(我宁愿分两步进行)。

我知道我的代码在Companies_controller.rb中是错误的——但这就是我所在的位置

  def create
    @user = current_user
    @company = @user.Company.new(params[:company])

    respond_to do |format|
      if @company.save
        format.html { redirect_to root_path, 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
4

2 回答 2

4

你的问题出在这条线上

@company = @user.Company.new(params[:company])

从用户到公司的关联不应使用大写字母访问。要让公司与用户关联,您应该这样称呼它:

@user.company

但是,如果没有关联的公司,那么该方法将返回 nil,并且您不能调用.newnil,因此您需要调用 Rails 为您创建的另一个方法,build_company如下所示:

@company = @user.build_company(params[:company])

最后一个问题是,由于是属于公司的用户,因此需要使用新创建的 company_id 更新 User 实例,如果只保存公司,则不会发生这种情况。但是当您使用 build_company 方法时,它会将公司实例存储在来自 User 的关联中,因此如果您对用户而不是公司调用 save ,它将创建公司并将其链接到用户,如下所示:

def create
  @user = current_user
  @user.build_company(params[:company])

  respond_to do |format|
    if @user.save
      format.html { redirect_to root_path, notice: 'Company was successfully created.' }
      format.json { render json: @user.company, status: :created, location: @user.company }
    else
      format.html { render action: "new" }
      format.json { render json: @user.company.errors, status: :unprocessable_entity }
    end
  end
end
于 2013-01-14T01:50:43.750 回答
1

您的User模型需要一company_id列。然后,您可以制作一个表格,在您喜欢的任何地方(即new_company_path页面上)记录该值。

于 2013-01-14T01:34:44.010 回答