【问题标题】:has_one update problemhas_one 更新问题
【发布时间】:2010-05-10 16:22:36
【问题描述】:

我有两个模型,用户和帐户。每个用户可能有一个帐户。

为用户创建帐户可以正常工作。我的问题是,当我尝试更新帐户时,以前的帐户 user_id 无效,并使用 user_id 创建了一个新帐户行。我不希望这种情况发生。我想使用对帐户的更改来更新现有行。我该怎么做呢?

谢谢。

【问题讨论】:

  • 能否请您发布您用于update 操作的代码?
  • @account = @user.account.build(params[:account]); if @account.save ... else ... 结束

标签: ruby-on-rails associations has-one


【解决方案1】:

使用此代码

@account = @user.account.build(params[:account])
if @account.save 
   #... 
else 
   #...
end 

您正在构建一个新的account。你需要的是更新

if @account.update_attributes(params[:account])
   #...
else
   #...
end

【讨论】:

  • update_attributes 在这种情况下比 update 更优雅...好调用
  • 显然我失去了我的“接受的解决方案”这个意见:(再见点
  • 从 Rails 2.3.8 开始,您可以添加 :update_only 以强制它更新现有关联而不是取消旧关联:accepts_nested_attributes_for :account, :update_only => true
【解决方案2】:

由于您没有提供任何代码,可以说这就是您创建用户的方式

user = User.create(:name => "bob")

然后您可以通过指定 user_id

将用户与帐户相关联
account = Account.create(:user_id =>user.id, :status => "not activated")

现在假设我们要更改帐户的状态。我们可以像这样在 rails http://api.rubyonrails.org/classes/ActiveRecord/Base.html#M002270 中调用更新的方法:

Account.update( account.id, :status => "activated")

我可以提供更多信息以提供更多帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多