1

次のように私はCompanyモデルを持っている:マッチし、別のRailsのシリアライズされた配列

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

end 

今、私は管理者がcontractorsに/会社からの追加/削除できるページがあります。次のように私はちょうどcontractorsで請負業者IDを保存contractorを追加するには:

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

私は今、単一ページ上の2つの別々のリストを表示したいです。 1つのリストが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は私がserializedから選択された契約者のリストを取得できますかrails console

を通じてCompany.find(1).contractorsを行うことによって確認された値["2", "1"]を持っているにもかかわらず、私の空のリストを与えていますデータ?

+1

上で示唆したように1にn個からのクエリを減らすことになる私は鍵があると思います'[" 2 "、" 1 "]'、引用符でチェックすると、それらは文字列で、 '@ company.contractors.include? 'c.id'は整数なので、c.id'は真ではありません。 'c.id.to_s'で試してください。 – fanta

+0

@fanta私もそれを試しましたが運がない、それでも私に空のリストが与えられます – anonn023432

+0

'@ contractors'にそれが含まれている請負業者を確認しましたか? – fanta

答えて

0

@fantaが正しいのは、文字列として保存されていたので、問題はto_sでした。私はまだかかわらず、私が書いたクエリと納得していないし、私が代わりに次のクエリを使用して終了:

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

here

関連する問題