J'essaie de refactoriser la méthode d'index Companies_Controller # pour englober moins de logique en déplaçant la majeure partie de la requête dans une étendue, company_search_params
.Erreur d'argument dans la portée du modèle
Quelle est la meilleure façon de transmettre le paramètre à la portée du modèle? Je reçois une erreur renvoyée, mauvais nombre d'arguments (donné 0, attendu 1). Je suis relativement nouveau dans l'écriture d'étendues et je n'ai pas trouvé grand-chose sur les arguments/conditions de passage applicables dans le Guide Rails.
sociétés Contrôleur
def index
params[:name_contains] ||= ''
Company.company_search_params(params[:name_contains])
@search = Company.company_search_params
@companies = @search.page(params[:page])
end
Modèle Société
scope :company_search_params, ->(name_contains){
where(
<<-SQL
"name LIKE :match OR subdomain LIKE :match", { match: "%#{name_contains}%" }
SQL
).where(is_archived: false).order(name: :asc)
}
Les Merci pour votre aide.
Pourquoi avez-vous aussi bien ' Company.company_search_params (params [ : name_contains]) 'et' @search = Company.company_search_params'? La première ne fait rien parce que vous faites attention à la valeur de retour, la seconde cause votre erreur. –
@muistooshort merci l'homme, je n'ai pas attrapé la redondance et je me rends compte que c'était primordial. – VegaStudios