创建用户必须使用用户的 id 参数创建一个新记录
Creating a User must create a new Record with the id Parameter of the User
我有两个模型; 用户 和记录。我想在创建新用户时自动创建一个新记录。新的 Record 必须有一个属性,它是新创建的 User 的 id。
我读过有关使用 link_to 传递参数的信息,但我认为这不是我需要的。我希望代码位于创建操作的用户控制器中。
所以我在我的控制器中写了这段代码:
def create
@user = User.new(user_params)
@record = Record.new(:user_id=>@user.id)
@record.save
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
format.js
end
end
为了检查它是否可以工作,我写了这个而不是以前的代码。它有效我有一个新记录,用户 ID 为 1
@Record = Record.new(:user_id=>"1")
@Record.save
如何获取创建的用户 ID 而不是 1?
我尝试了几种选择:
params[:id]
User.find(params[:id])
试试下面的代码 -
@user = User.new(user_params)
@user.build_record # if you have has_one association in user model
@user.records.build # if you have `has_many` association in user model
@user.save
所以你的控制器代码应该是 -
def create
@user = User.new(user_params)
@user.build_record
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
format.js
end
end
class User
has_many :records, autosave: true
after_initialize {
# this is automatically creating a new record element
# and save its association, but only if its a new record (user)
records.build if self.new_record?
}
end
#in your controller
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
format.js
end
end
我最终找到了一个行之有效的解决方案。
这是我在我的控制器中使用的代码,因此创建一个 User 会自动创建一个带有用户 ID 的 Record。
我必须准确地说,我对这两个模型有以下关系:
在 user model
中:has_one :record
在 record model
中:belongs_to :user
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
@record = Record.create(user: @user)
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
仅此而已。
我认为@GDMN 的答案中的代码不会起作用。
一旦用户记录被保存,如果请求是 html 类型,它就会重定向,或者如果是 json 请求,它就会呈现一些东西。此行 @record = Record.create(user: @user)
将针对 html 和 json 以外的请求类型执行,否则不会执行。您可以使用从@Vishnu 的回答中复制的以下代码
@user = User.new(user_params)
@user.build_record
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
format.js
end
我有两个模型; 用户 和记录。我想在创建新用户时自动创建一个新记录。新的 Record 必须有一个属性,它是新创建的 User 的 id。
我读过有关使用 link_to 传递参数的信息,但我认为这不是我需要的。我希望代码位于创建操作的用户控制器中。
所以我在我的控制器中写了这段代码:
def create
@user = User.new(user_params)
@record = Record.new(:user_id=>@user.id)
@record.save
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
format.js
end
end
为了检查它是否可以工作,我写了这个而不是以前的代码。它有效我有一个新记录,用户 ID 为 1
@Record = Record.new(:user_id=>"1")
@Record.save
如何获取创建的用户 ID 而不是 1?
我尝试了几种选择:
params[:id]
User.find(params[:id])
试试下面的代码 -
@user = User.new(user_params)
@user.build_record # if you have has_one association in user model
@user.records.build # if you have `has_many` association in user model
@user.save
所以你的控制器代码应该是 -
def create
@user = User.new(user_params)
@user.build_record
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
format.js
end
end
class User
has_many :records, autosave: true
after_initialize {
# this is automatically creating a new record element
# and save its association, but only if its a new record (user)
records.build if self.new_record?
}
end
#in your controller
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
format.js
end
end
我最终找到了一个行之有效的解决方案。 这是我在我的控制器中使用的代码,因此创建一个 User 会自动创建一个带有用户 ID 的 Record。
我必须准确地说,我对这两个模型有以下关系:
在 user model
中:has_one :record
在 record model
中:belongs_to :user
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
@record = Record.create(user: @user)
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
仅此而已。
我认为@GDMN 的答案中的代码不会起作用。
一旦用户记录被保存,如果请求是 html 类型,它就会重定向,或者如果是 json 请求,它就会呈现一些东西。此行 @record = Record.create(user: @user)
将针对 html 和 json 以外的请求类型执行,否则不会执行。您可以使用从@Vishnu 的回答中复制的以下代码
@user = User.new(user_params)
@user.build_record
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render :show, status: :created, location: @user }
else
format.html { render :new }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
format.js
end