【发布时间】:2017-11-17 02:01:41
【问题描述】:
我有一个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
我现在想在一个页面上显示两个单独的列表。这样一个列表包含与company 关联的所有contractors,而另一个列表包含与该公司无关的所有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 数据中获取选定承包商的列表?
【问题讨论】:
-
我认为关键是
["2", "1"],检查引号,它们是字符串,@company.contractors.include? c.id永远不会是真的,因为c.id是整数。试试c.id.to_s。 -
@fanta 我也试过了,但没有运气,它仍然给我一个空列表
-
你检查过
@contractors看看它包含哪些承包商?,也许它有不同的/
标签: ruby-on-rails arrays postgresql ruby-on-rails-4 serialization