Rails 4 - 如何在用户和空间之间建立租户关系?

时间:2015-06-20 20:40:10

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我正在构建一个Rails 4应用程序,并试图找出如何以User的形式在Spacetenantship模型之间创建关系。

tenantship模型将包含:user_idspace_idstart_timeend_time

我尝试使用ActiveRecord关联来实现这一点,但我的主要问题是当用户实际注册tenantship时,如何在我的视图,控制器和模型录制中进行操作用户在一段时间内成为租户。

2 个答案:

答案 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

这应该为您提供三个模型:SpaceUserTenancy,大致如下所示:

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

控制器

您可能希望UserSpaces都使用基本控制器,这样您就可以创建/编辑/删除这些控制器。稍微不同寻常的控制器将是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并保存此记录。专用控制器将负责管理这些租户。将这些链接与其他模型相关联需要设置关联并查询它们(查找特定空间的所有用户等)。