我想我的rails应用程序可能需要多传递关联。我需要一些帮助来做出这个决定和实现逻辑。
我有4个型号。
1. User - has_and_belongs_to_many :locations
2. Locations - has_and_belongs_to_many :users
3. Customer - model in question
4. Job - model in question
每个用户都被分配到特定位置,以便用户可以查看客户并编辑与他们相关联的位置的作业。
我认为我需要多次传递关联的部分是我的Customer
和Job
模型。
基本上,应该有一个客户记录。客户应该在许多地方有很多工作。但是,用户只应在与其关联的位置看到客户。这是让我陷入困境的部分。
更新
试图提出一个想法,也许这种关联会起作用:
User has_and_belongs_to_many :locations
Location has_and_belongs_to_many :users
Customer has_and_belongs_to_many :locations, has_many :jobs
Job belongs_to :customers, belongs_to :locations
然后我可以通过
访问指定位置的所有客户User has_many :customers, through: :locations
User has_many :jobs, through: :locations
答案 0 :(得分:2)
尽力解释。用户应该能够登录并查看他们工作的所有位置。他们应该能够选择一个位置并查看该位置的所有客户,还可以查看该位置的所有工作(位置可能类似于地区或城市)。用户可能在美国的位置以及加拿大的位置工作,因此如果该用户选择加拿大,那么用户应该只能查看(通过关联)加拿大客户和加拿大的工作
下面的代码可以解决您的问题。
class User < ActiveRecord::Base
has_many_and_belongs_to :locations
has_many :customers, through: :locations
has_many :jobs, through: :locations
end
class Location < ActiveRecord::Base
has_many_and_belongs_to :users
has_many_and_belongs_to :customers
has_many_and_belongs_to :jobs
end
class Customer < ActiveRecord::Base
has_and_belongs_to_many :locations,
end
class Job < ActiveRecord::Base
has_many_and_belongs_to :locations
end
现在在控制器中你可以使用:
说params = {region: 'canada'}
@canada_jobs = current_user.jobs.where(locations: {region: params[:region]})
@canada_customers = current_user.customers.where(locations: {region: params[:region]})