我有2个模型用户和公司。(我使用的是design for User)
- 用户属于公司。
- 公司用户众多
My User model包含一个client_id列。
目前,用户注册并被定向到new_company_path,我想在其中创建关系。(我更喜欢分两步完成)。
我知道我的代码在 companyes_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更新user实例,如果只保存公司,则不会发生这种情况。但是当你使用build_company方法时,它会将公司实例存储在用户关联中所以如果你对用户而不是公司调用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
您的User
模型需要company_id
列。然后你可以做一个表单来记录这个值,无论你喜欢(即,在new_company_path
页)。