Soy un novato en los rieles y estoy tratando de realizar una búsqueda sobre una mesa con rieles, y solo estoy usando mi conocimiento SQL para hacerlo. Pero esto simplemente no parece carriles o ruby, incluso ...Cómo agregar cláusulas condicionales donde en los rieles
¿Hay alguna otra forma mejor de hacer lo que hago a continuación? (Básicamente, sólo pasan argumentos de fecha a SQL si se surten)
def search(begin_date=nil, end_date=nil)
subject = " and created_at "
if !(begin_date.nil? || end_date.nil?)
where_part = subject + "BETWEEN :begin_date AND :end_date"
else if (begin_date.nil? && end_date.nil?)
where_part = ""
else if(begin_date.nil?)
where_part = subject + " <= :end_date"
else if (end_date.nil?)
where_part = subject + " >= :begin_date"
end
end
end
end
User.joins(places: {containers: {label: :user}}).where("users.id= :user_id "+where_part, user_id: self.id, begin_date:begin_date, end_date:end_date).group(...).select(...)
end
EDITAR
user.rb
has_many :containers
has_many :user_places
has_many :places, through: :user_places
has_many :labels
place.rb
has_many :containers
has_many :user_places
has_many :users, through: :user_places
contenedor. rb
belongs_to :label
belongs_to :place
belongs_to :user
label.rb
belongs_to :user
has_many :containers
Básicamente, quiero obtener un recuento del número de contenedores dentro de las etiquetas de un usuario determinado o con una relación directa, por ubicación, y quieren ser capaces de filtrarla por las fechas de inicio y finalización.
Cualquiera de estas fechas puede ser nula, por lo que tendré que abordar esto en mi "consulta".
Mi pregunta es: ¿Cómo puedo hacer esto al estilo de los rieles? Eché un vistazo a http://guides.rubyonrails.org/active_record_querying.html y quizás podría usar el comando except aquí en alguna parte ... pero este modelo de relación parece un poco complejo para hacer esto con ActiveRecord ... ¿cómo puedo ?, realmente creo que debería usar ActiveRecord, pero ¿cómo?
Gracias
[aquí es un buen ejemplo de cómo hacerlo se une con el registro activo] [1] [1]: http://stackoverflow.com/questions/764538/ruby-on-rails-how -to-join-two-tables –
Hola, mi problema no está en las uniones ... Simplemente no las escribí porque no son relevantes.Lo que pasa es que con los parámetros de búsqueda condicional – MrWater
@itsalltime - Creo que lo que Bob intenta decir es - ¿por qué no usar Active Record en lugar de escribir SQL directamente? http://guides.rubyonrails.org/active_record_querying.html – JasCav