2016-02-01 2 views
2

Je suis en train d'apprendre la recherche avancée dans un tutoriel où l'utilisateur peut trouver des articles en fonction de la catégorie. Mais en quelque sorte ma page avancée me donne cette erreur:Rails 4 ArgumentError - mauvais nombre d'arguments

ArgumentError in Searches#new Showing app/views/searches/new.html.haml where line #10 raised:

wrong number of arguments (3 for 1..2)

La ligne sur laquelle je reçois l'erreur est:

= s.text_field :category, options_for_select(@categories), :include_blank => true 

Le fichier ci-dessus est new.html.haml (ligne 10). Voici les recherches controller.rb, Je pense que le @categories dans la méthode new n'est pas correct.

class SearchesController < ApplicationController 

    def new 
     @search = Search.new 
     @categories = Idea.uniq.pluck(:category) 
    end 

    def create 
     @search = Search.create(search_params) 
     redirect_to @search 
    end 

    def show 
     @search = Search.find(params[:idea_id]) 
    end 

    private 

    def search_params 
     params.require(:search).permit(:keywords, :category) 
    end 

end 

Et mon model.rb

class Search < ActiveRecord::Base 

    def search_ideas 
     ideas = Idea.all 

     ideas = ideas.where(["title LIKE ?","%#{keywords}%"]) if keywords.present? 
     ideas = ideas.where(["category LIKE ?","%#{category}%"]) if category.present? 

     return ideas 
    end 

end 

J'ai essayé d'utiliser collection_select au lieu de s.text_field mais il me donne toujours cette erreur.

Répondre

2

Essayez d'utiliser s.select comme ceci:

= s.select :category, options_for_select(@categories), :include_blank => true 
1

Que se référer à la première documentation.

select(object, method, choices = nil, options = {}, html_options = {}, &block)

Parce qu'il a deux options de hachage, de sorte que vous devez spécifier le options avant html_options

s.select :category, options_for_select(@categories), {}, {include_blank: true}