在Rails 3中,has_one
关联用于在两个模型之间建立一对一的关系。这意味着一个模型实例只能与另一个模型实例相关联。例如,如果有一个Person
模型和一个Profile
模型,每个人只有一个个人资料,那么可以在这两个模型之间使用has_one
关联。
在Person
模型中,可以这样定义关联:
class Person< ActiveRecord::Base
has_one :profile
end
在Profile
模型中,可以这样定义关联:
class Profile< ActiveRecord::Base
belongs_to :person
end
has_one
关联会自动为Person
模型添加一些有用的方法,例如:
person.profile
:获取与该人关联的个人资料。person.profile=
:设置与该人关联的个人资料。person.build_profile
:创建一个新的个人资料实例,并将其与该人关联。person.create_profile
:创建一个新的个人资料实例,将其与该人关联,并将其保存到数据库中。person.create_profile!
:与create_profile
类似,但在保存时会抛出异常,如果个人资料无法保存。在Rails路由中,可以使用resources
方法为has_one
关联生成路由:
resources :people do
resource :profile
end
这将生成以下路由:
person_profile GET|POST /people/:person_id/profile(.:format) profiles#create
edit_person_profile GET /people/:person_id/profile/edit(.:format) profiles#edit
person_profile GET /people/:person_id/profile(.:format) profiles#show
person_profile PATCH|PUT /people/:person_id/profile(.:format) profiles#update
person_profile DELETE /people/:person_id/profile(.:format) profiles#destroy
这些路由将映射到ProfilesController
中的相应操作。
领取专属 10元无门槛券
手把手带您无忧上云