Ich verwende Rails 4.2.3. Ich habe Probleme, eine variable Anzahl von Suchkriterien an meine Rails-Finder-Methode zu übergeben. Ich habe"Falsche Anzahl von Bind-Variablen" erhalten, wenn ich versuche, eine Rails-Finder-Methode zu schreiben
user = current_user
search_criteria = ["my_objects.user_id = ?"]
search_values = [user.id]
start_date = params[:start_date]
if start_date.present?
start_date_obj = Date.strptime(start_date, "%m/%d/%Y")
search_criteria.push("my_objects.start_date >= ?")
search_values.push(start_date_obj)
else
start_date = my_object.find_user_first_my_object_date(user)
@default_start_date = start_date.to_time.strftime("%m/%d/%Y") if start_date.present?
end
end_date = params[:end_date]
if end_date.present?
end_date_obj = Date.strptime(end_date, "%m/%d/%Y")
search_criteria.push("my_objects.end_date <= ?")
search_values.push(end_date_obj)
else
end_date = my_object.find_user_last_my_object_date(user)
@default_end_date = end_date.to_time.strftime("%m/%d/%Y") if end_date.present?
end
distance = params[:distance]
if distance.present?
distance_parts = distance.split(" ")
search_criteria.push("my_objects.distance = ?")
search_criteria.push("my_objects.distance_unit_id = ?")
search_values.push("#{distance_parts[0]}")
search_values.push("#{distance_parts[1]}")
end
@user_my_objects = MyObjectTime.joins(:my_object).where(search_criteria.join(" AND "), search_values)
.order("my_objects.day")
Aber dies führt zu dem Fehler
wrong number of bind variables (1 for 5) in: my_objects.user_id = ? AND my_objects.start_date >= ? AND my_objects.end_date <= ? AND my_objects.distance = ? AND my_objects.distance_unit_id = ?
Ich denke, Rails mein „search_values“ Array als ein einziger Wert behandelt, aber ich möchte es als Argument jeden Wert des Arrays zu übergeben in die Suchbedingung. Wie repariere ich das oben genannte?
Als Randbemerkung, versuchen und kondensieren die Menge an Code, den Sie in Frage gestellt - Streifen um das entsprechende Bit aus (der wo Anruf und seine Parameter) aus dem Rauschen (Ihr Parameter Parsing-Code). –