我正在构建一个Rails 4应用程序,并试图找出如何以User
的形式在Space
和tenantship
模型之间创建关系。
tenantship
模型将包含:user_id
,space_id
,start_time
,end_time
我尝试使用ActiveRecord
关联来实现这一点,但我的主要问题是当用户实际注册tenantship
时,如何在我的视图,控制器和模型录制中进行操作用户在一段时间内成为租户。
答案 0 :(得分:1)
这是has_many :through
关系的一个很好的案例,因为您不仅对用户和空间之间的关系感兴趣,而且还希望了解一些其他细节,例如租期条款。现在,更详细:
has_many :through
关系的官方文档在这里(http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many)
这应该为您提供三个模型:Space
,User
和Tenancy
,大致如下所示:
class User
has_many :spaces, through: :tenancies
end
class Space
has_many :users, as: :residents, through: :tenancies
end
class Tenancy
# user_id
# space_id
# date_from
# date_to
belongs_to :spaces
belongs_to :users
end
您可能希望User
和Spaces
都使用基本控制器,这样您就可以创建/编辑/删除这些控制器。稍微不同寻常的控制器将是TenancyController
。您可以发布到此控制器以创建新租约,例如:
class TenancyController
def create
Tenancy.create(tenancy_params)
# ...
end
private
def tenancy_params
params.permit(:user_id, :space_id, :date_from, :date_to)
end
end
要与租户控制器对应,您需要一个包含用户和空间输入的视图。这可能类似于:
= form_for Tenancy.new do |f|
= f.user_id
= f.space_id
= f.date_from
= f.date_to
= f.submit
这些显然是上面粗略的概述,但希望能给你一些如何进行的概述!
答案 1 :(得分:0)
在数据库级别,在空间的租用中注册用户只是在您的租用表中创建新记录。您记录用户和空间的ID并保存此记录。专用控制器将负责管理这些租户。将这些链接与其他模型相关联需要设置关联并查询它们(查找特定空间的所有用户等)。