0

Setup: J'ai un Job et un Prix modèle où le travail comporte deux champs start_date et date_fin et la Prix a une autre zone de date effective_at. Le Job has_many Prix si une région. J'utilise le by_star gem qui permet des requêtes comme between_times qui obtient simplement les enregistrements entre les champs définis dans le modèle.Rails a de nombreux à travers le champ de la date d'un modèle se situe entre les dates d'autres modèles

J'ai besoin tous les prix qui se situent entre start_date et de date_fin du travail. Je crois que j'ai besoin d'être défini dans le has_many à en raison du cadre rails_admin, mais ne peut pas trouver la meilleure façon de le faire. Voici les modèles:

class Job < ActiveRecord::Base 
    belongs_to :region 
    has_many :prices, through: :region 
    # fields: start_date, end_date 
end 

class Price < ActiveRecord::Base 
    belongs_to :region 
    has_many :jobs, through: :region 
    # fields: effective_at 
end 

class Region < ActiveRecord::Base 
    has_many :jobs 
    has_many :prices 
end 

Je suis limitée par des moyens pour y parvenir en raison du fait que l'application est construite sur le cadre rails_admin, sinon je ferais quelque chose comme ci-dessous (qui fonctionne très bien, mais gagné « t afficher correctement dans le cadre rails_admin

def job_opis_prices 
    prices.between_times(self.start_date, self.end_date) 
end 

J'ai aussi essayé.

class FracJob < ActiveRecord::Base 
    has_many :opis_prices, through: :region do 
    def during_job 
     where(effective_at: between_times(start_time..end_time)) 
    end 
    end 
end 

Toute aide est appréciée GRANDEMENT!

Répondre

0

Je pense que vous pouvez utiliser default_scope, comme

class Price < ActiveRecord::Base 
    default_scope { joins(:jobs).where('prices.created_at between jobs.created_at and jobs.updated_at') } 
end