从has_many到关系获取值

时间:2014-03-05 16:19:57

标签: ruby-on-rails associations

我的设置:

class ServiceUser < ActiveRecord::Base
   belongs_to :user
   belongs_to :service

   enum status: [ :unavailable, :available ]
end

class Service < ActiveRecord::Base
  has_many :service_users
  has_many :users, :through => :service_users
end

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  has_many :service_users
  has_many :services, :through => :service_users
end

从ServiceUser模型我可以调用状态字段,在我的情况下可用且不可用。 在我的应用程序中,我列出了特定服务的所有用户:

@service.users

但现在我想从ServiceUser模型中显示每个用户的状态。最好的办法是什么?

另外,我想为ServiceUser模型创建一个表单,以便在服务和当前用户之间建立新关系:

ServiceUser.new(service_id: @service.id, user_id: current_user.id, status: 1)

我需要在表单中指定什么?

1 个答案:

答案 0 :(得分:0)

构造一个哈希,其中user_id为键,值为状态

user_status = Hash[*@service.service_users.map{|su|[su.user_id, su.status] }.flatten]

现在您可以通过

获取每个用户的状态
@service.users.each do |user|
 p user_status[user.id]
end