2017-10-17 4 views
0

J'ai dans mon champ de table TravelIdeascountry_trips, qui comprend la liste des pays.Ruby on rails/Active Record Query: retour si field/record with array ne contient pas d'élément

#<TravelIdea:0x007faa7bec40f0> { 
         :id => 9, 
       :idea_key => "romantic", 
       :idea_type => nil, 
        :cost => 2000, 
       :created_at => Mon, 10 Jul 2017 07:48:49 UTC +00:00, 
       :updated_at => Mon, 16 Oct 2017 08:10:47 UTC +00:00, 
      :country_trips => [ 
       [0] "PL" 
       ], 
    :available_languages => [ 
       [0] "pl" 
       ] 
} 

voyages locaux a nul en :country_trips, donc je peux les ignorer:

idea.where.not(country_trips: nil) if country.present?

J'ai mon pays de destination de l'utilisateur, donc je veux lui montrer toutes les idées de voyage qui contient son pays rêvé.

Il serait STH comme serveur SQL CONTIENT (colonne, « pays »)

C'est probablement pas LIKE parce que cela ne concerne pas correspondant à 1 pays 1 pays.

Par exemple country = user.destination_country moyens: country = "PL"

mais

:country_trips => [ 
    [0] "PL", 
    [1] "DE" 
    ], 

Je cherche qqch comme

TravelIdea.where(country_trips: country)

qui renverra toutes les idées de voyage qui ont cette pays en nombre ry_trips tableau: P

+0

Avez vous utilisez 'serialize: country_trips' de Rails ou avez-vous utilisé votre système intégré RDMS pour stocker des tableaux? (comme ceci pour postgres https://www.postgresql.org/docs/9.1/static/arrays.html) – MrYoshiji

+0

J'utilise postgres tableau – eudaimonia

+0

essayez ceci 'TravelIdea.where ('country_trips = any (?)', ' PL ') '(vous pouvez google * postgres array rails * et vous trouverez des informations utiles comme celle-ci https://coderwall.com/p/sud9ja/rails-4-the-postgresql-array-data-type) – MrYoshiji

Répondre

1

Ceci est plus une question postgres, l'article 8.15.5. Searching in Arrays dit:

SELECT * FROM sal_emp WHERE 10000 = ANY (pay_by_quarter); 

Dans votre cas, vous pourriez écrire que comme un segment SQL dans la méthode .where:

TravelIdea.where("? = ANY (country_trips)", country)