gpt4 book ai didi

ruby-on-rails-3 - 无法在 Controller 中创建 belongs_to 关联

转载 作者:行者123 更新时间:2023-12-04 07:21:02 26 4
gpt4 key购买 nike

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

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

我的用户模型包含一个 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

最佳答案

你的问题出在行内

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

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

@user.company

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

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

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

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

关于ruby-on-rails-3 - 无法在 Controller 中创建 belongs_to 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14310304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com