Ruby on rails 在创建到另一个表后插入id
我正在尝试找出在创建项之后获取其id并将该id传递到另一个表中的最佳方法。i、 如果用户创建了一个团队,并将其保存到团队数据库中,我想将该Ruby on rails 在创建到另一个表后插入id,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正在尝试找出在创建项之后获取其id并将该id传递到另一个表中的最佳方法。i、 如果用户创建了一个团队,并将其保存到团队数据库中,我想将该team\u id分配到我的users表中 我试过下面的方法,但没有成功 def create @team = Team.new(params[:team]) @user = current_user respond_to do |format| if @team.save format.html {
team\u id
分配到我的users表中
我试过下面的方法,但没有成功
def create
@team = Team.new(params[:team])
@user = current_user
respond_to do |format|
if @team.save
format.html { redirect_to(teams_url,
:notice => "Team #{@team.name} was successfully created.") }
format.json { render :json => @team, :status => :created, :location => @team }
@user.update_attributes(params[:user][@team.id])
else
format.html { render :action => "new" }
format.json { render :json => @team.errors, :status => :unprocessable_entity }
end
end
end
团队模式
class Team < ActiveRecord::Base
has_many :users
has_many :events
belongs_to :division
belongs_to :sport
attr_accessible :name, :division_id, :sport_id
validates :name, :presence => true
end
最简单的修复方法是修复传递给update_属性的参数
@user.update_attributes(:team_id => @team.id)
此时,params散列不在其中。它主要包含来自GET/POST变量的信息,比如来自表单的params[:team]
更新
查看模型后,如果不使team_id可访问,update_属性将无法工作,这是一个安全问题,通常不应使外键可访问。而是用赋值替换update_属性
def create
@team = Team.new(params[:team])
respond_to do |format|
if @team.save
format.html { redirect_to(teams_url, :notice => "Team #{@team.name} was successfully created.") }
format.json { render :json => @team, :status => :created, :location => @team }
# use assignment instead to avoid mass assignment errors
current_user.team = @team
else
format.html { render :action => "new" }
format.json { render :json => @team.errors, :status => :unprocessable_entity }
end
end
end
应该使用活动记录关联来解决此问题
这是将一个项目id排序到不同数据库的另一个项目的最佳方法。因此,请尝试使用活动记录关联。
已更新
if @team.save
@user.update_attributes(:team_id => @team.id)
format.html { redirect_to(teams_url,
:notice => "Team #{@team.name} was successfully created.") }
format.json { render :json => @team, :status => :created, :location => @team }
保存后使用更新代码,而不是重定向后使用更新代码。3下面的选项
def create
@team = Team.new(params[:team])
saved = false
Team.transaction do
saved = @team.save
if saved
# 1) this should work ?
@team.users << current_user
# 2) if that doesn't then this most def
current_user.team = @team
current_user.save!
# 3) or
current_user.update_attribute(:team_id, @team.id)
end
end
respond_to do |format|
if saved
format.html { redirect_to(teams_url, :notice => "Team #{@team.name} was successfully created.") }
format.json { render :json => @team, :status => :created, :location => @team }
else
format.html { render :action => "new" }
format.json { render :json => @team.errors, :status => :unprocessable_entity }
end
end
end
def创建
@团队=团队。新建(参数[:团队])
保存=错误
团队。交易做什么
saved=@team.save
如果保存
#1)这应该有效吗?
@team.users为11:Fixnum`Oops提供了undefined方法
stringify_keys',他写道,太快了,构建团队似乎没有将团队模型的id传递给用户:SHmm,在文档中查找它,实际上没有任何关于从属于一个多的一侧构建的内容。坚持你所拥有的,我想…集群阅读文档你的第二种方法应该有效我只是不明白为什么我看不到你的关联配置?在你的用户模型中添加attr\u accessible:team\u id然后使用@User.update\u属性(:team\u id=>@team.id)在您的物品板条箱操作中,它可能会起作用。我已更新了我的问题,以显示在执行选项所有3个选项时发生的情况。我已选择使用选项2中的第一个选项。保存是不必要的。当两个模型都被持久化后,分配将更新外键。在#2-团队已经被保存,我不相信会有另一个对db的调用,除非它是明确的
if @team.save
@user.update_attributes(:team_id => @team.id)
format.html { redirect_to(teams_url,
:notice => "Team #{@team.name} was successfully created.") }
format.json { render :json => @team, :status => :created, :location => @team }
def create
@team = Team.new(params[:team])
saved = false
Team.transaction do
saved = @team.save
if saved
# 1) this should work ?
@team.users << current_user
# 2) if that doesn't then this most def
current_user.team = @team
current_user.save!
# 3) or
current_user.update_attribute(:team_id, @team.id)
end
end
respond_to do |format|
if saved
format.html { redirect_to(teams_url, :notice => "Team #{@team.name} was successfully created.") }
format.json { render :json => @team, :status => :created, :location => @team }
else
format.html { render :action => "new" }
format.json { render :json => @team.errors, :status => :unprocessable_entity }
end
end
end