Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何更新没有FK的现有嵌套属性_Ruby On Rails_Nested Attributes - Fatal编程技术网

Ruby on rails 如何更新没有FK的现有嵌套属性

Ruby on rails 如何更新没有FK的现有嵌套属性,ruby-on-rails,nested-attributes,Ruby On Rails,Nested Attributes,假设用户有一个:订阅,订阅属于:用户,并且我正在使用accepts\u nested\u attributes\u for将订阅属性嵌套到用户创建表单中,根据User.email==subscription.email查找和更新现有订阅(如果存在)的最佳方法是什么 请注意,现有订阅可能具有user_id=nil,您可能希望使用电子邮件作为外键: class User < ActiveRecord::Base has_one :subscription, :foreign_key =&g

假设用户有一个:订阅,订阅属于:用户,并且我正在使用accepts\u nested\u attributes\u for将订阅属性嵌套到用户创建表单中,根据User.email==subscription.email查找和更新现有订阅(如果存在)的最佳方法是什么


请注意,现有订阅可能具有user_id=nil

,您可能希望使用电子邮件作为外键:

class User < ActiveRecord::Base
  has_one :subscription, :foreign_key => "email", :primary_key => "email"
end
class用户电子邮件,:主键=>电子邮件
结束

我认为这需要分为两个步骤:

  • 找到要更新的用户
  • 找到具有用户电子邮件地址的订阅(如果有),请将该用户的订阅设置为此记录
  • 按正常方式更新用户。由于关联现在存在(即user.subscription不会为零),订阅记录将正确更新

  • 人力资源管理,是的……我想过这么做。让我来玩玩那个主意。谢谢。我偶尔也这样做。除了作为一个自然密钥之外,它还可以很好地工作,这意味着当用户想要更改他们的电子邮件地址时,您将遇到问题。请确保您在电子邮件中为这两个表都设置了索引。好的,我已经设置了关联,但仍然会得到重复的记录。我在接受的嵌套属性上有update_only=>true。有什么想法吗?问题可能是订阅电子邮件不是通过表单发送的,而是设置为。。。在保存{self.email=user.email if user}之前。不确定…如果是这样,您可能需要在控制器中使用一些自定义逻辑来处理它。嵌套属性可能不是您正在寻找的解决方案。