在我的webapp中,我的用户注册页面有一个组织名称字段。我有一个has_many :users
的组织模型,以及我的用户模型belongs_to :organization
。创建新用户时,我希望组织名称值用于创建新的组织记录,并将其与用户关联,以便user.organization_id =新的组织ID。
这是我的users_controller.rb代码:
class UsersController < ApplicationController
def new
@user = User.new
end
def show
@user = User.find(params[:id])
@organization = Organization.find(@user.organization_id)
end
def create
@organization = Organization.new(organization_params)
@user = User.new(user_params)
if @user.save && @organization.save
sign_in @user
redirect_to @user
flash[:success] = "Welcome to the App!"
else
flash.now[:danger] = "Uh oh, there's been an error"
render 'new'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
def organization_params
params.require(:organization).permit(:name)
end
end
现在,当用户提交注册表单时,正在创建用户记录和组织记录,但不保存关联。 user.organization_id值为nil。
你能评论一下是什么问题吗?如果有一个好方法可以做我想做的事 - 也许用.build?
谢谢! 布伦南
答案 0 :(得分:1)
是的! .build可以工作,但由于它只有一个关联,你将在构建命令中使用关联名称,即build_organization
def create
@user = User.new(user_params)
@user.build_organization(organization_params)
if @user.save
blah blah blah
如果以这种方式完成,您只需要保存用户(而不是@organization),因为这种关联得到了处理。
答案 1 :(得分:0)
在user_params permit:organization_id;)
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation, :organization_id)
end
编辑:您还需要为用户设置organization_id - 如果您没有在表单中进行设置(例如使用select或其他字段),您可以使用.build方法。