我有一个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
数据中获取所选承包商的列表?
答案 0 :(得分:0)
@fanta是对的问题是to_s
,因为它被保存为字符串。我仍然不相信我写的查询,但我最终使用了以下查询:
@selected_contractors = Contractor.find(@company.contractors)
会根据here
的建议将查询从n减少到1