Ruby on rails 在RubyonRails中,has_one和belishing_to之间的区别在于一对多的关系

Ruby on rails 在RubyonRails中,has_one和belishing_to之间的区别在于一对多的关系,ruby-on-rails,ruby-on-rails-3,relational-database,relationship,Ruby On Rails,Ruby On Rails 3,Relational Database,Relationship,我的想法是,我有一个表用户和一个表客户。每个用户都有许多只与他们相关的客户。实际上我用的是这个模型。因此,将要创建的每个客户也将在customers表中获得相关的用户id class Customer belongs_to :user end class User has_many :customers end 在提出了一些这样的问题之后,有人告诉我,为了同样的结果,我应该使用这个模型 class Customer has_one :user end class User

我的想法是,我有一个表用户和一个表客户。每个用户都有许多只与他们相关的客户。实际上我用的是这个模型。因此,将要创建的每个客户也将在customers表中获得相关的用户id

class Customer 
  belongs_to :user
end

class User
  has_many :customers
end
在提出了一些这样的问题之后,有人告诉我,为了同样的结果,我应该使用这个模型

class Customer
  has_one :user
end

class User
  belongs_to :customer
end
但我不明白有什么不同。任何简单的解释我的方式是对的还是错的

问候
denym

事实上不会是相同的结果

第一个: 将在客户中设置用户\u id,而在用户中不设置任何内容。这意味着一个客户只能与一个用户相关。在反射方面,你可以做如下事情:

user = User.create(name: 'John Snow')
customer = user.customers.build(name: 'Tywin Lannister')
customer.save

user.inspect
=> #<User id: 8, name: "John Snow">

customer.inspect
=> #<Customer id: 12, user_id: 8, name: "Tywin Lannister">

user.customers.inspect 
=> [#<Customer id: 12, user_id: 8, name: "Tywin Lannister">]

customer.user
=> #<User id: 8, name: "John Snow">
customer = Customer.create(name: 'Tywin Lannister')
user = customer.build_user(name: 'John Snow')

user.inspect
=> #<User id: 8, customer_id: 12, name: "John Snow">

customer.inspect
=> #<Customer id: 12, name: "Tywin Lannister">

user.customer
=> #<Customer id: 12, name: "Tywin Lannister">

customer.user
=> #<User id: 8, customer_id: 12, name: "John Snow">
将在用户中设置客户id。你可以这样做:

user = User.create(name: 'John Snow')
customer = user.customers.build(name: 'Tywin Lannister')
customer.save

user.inspect
=> #<User id: 8, name: "John Snow">

customer.inspect
=> #<Customer id: 12, user_id: 8, name: "Tywin Lannister">

user.customers.inspect 
=> [#<Customer id: 12, user_id: 8, name: "Tywin Lannister">]

customer.user
=> #<User id: 8, name: "John Snow">
customer = Customer.create(name: 'Tywin Lannister')
user = customer.build_user(name: 'John Snow')

user.inspect
=> #<User id: 8, customer_id: 12, name: "John Snow">

customer.inspect
=> #<Customer id: 12, name: "Tywin Lannister">

user.customer
=> #<Customer id: 12, name: "Tywin Lannister">

customer.user
=> #<User id: 8, customer_id: 12, name: "John Snow">
customer=customer.create(名称:“Tywin Lannister”)
user=customer.build\u用户(名称:“John Snow”)
用户检查
=> #
顾客检查
=> #
用户
=> #
用户
=> #
所以在你的情况下 你需要第一个

来自文档:

“属于”关联与另一个模型建立一对一的连接,这样声明模型的每个实例“属于”另一个模型的一个实例


has_one关联还与另一个模型建立了一对一的连接,但语义(和结果)有所不同。此关联表示一个模型的每个实例都包含或拥有另一个模型的一个实例。

实际上,我正在考虑将此作为我自己的提醒:)不知道为什么建议您使用第二个实例,虽然我不知道,但现在让我困惑了两天。但你的帖子又让我相信了我的解决方案:)