匹配并分离Rails序列化数组

时间:2017-06-14 19:11:46

标签: ruby-on-rails arrays postgresql ruby-on-rails-4 serialization

我有一个Company模型如下:

class Company < ActiveRecord::Base
  has_many :employee_roles
  has_many :employees
  validates :company_name, uniqueness: true
  serialize :contractors, Array

end

现在我有一个页面,管理员可以向公司添加/删除contractors。要添加contractor,我只需将承包商ID存储在contractors中,如下所示:

def assign_contractors
  @company = Company.find(company_contractor_params[:company_id])
  @company.contractors << company_contractor_params[:contractor_id]
  @company.save
end

我想现在在一个页面上显示两个单独的列表。这样一个列表就是与contractors相关联的所有company,而另一个列表与该公司没有关联的所有contractors

def contractor_list
  @contractors = Contractor.where({ verified: true,
                        validated: true })
              .where('membership_type != ?', Contractor.membership_types["no_membership"])
  @company = Company.find(contractor_company_params[:company_id])

  @selected_contractors = @contractors.select { |c| @company.contractors.include? c.id }
  return render :status => 200, :json => {
    :contractors => @contractors,
    :selected_contractors => @selected_contractors
  }
end

但它给了我一个空列表,即使我所选公司的contractors的值["2", "1"]我通过Company.find(1).contractors rails console进行了检查}

如何从serialized数据中获取所选承包商的列表?

1 个答案:

答案 0 :(得分:0)

@fanta是对的问题是to_s,因为它被保存为字符串。我仍然不相信我写的查询,但我最终使用了以下查询:

@selected_contractors = Contractor.find(@company.contractors) 

会根据here

的建议将查询从n减少到1