Rails 4错误:ArgumentError – 参数数量错误

我是rails的新手,目前正在编写我的第一个应用程序。 我创建了一个搜索来搜索我的用户(用户名或标签 – 使用acts_as_taggable_on gem)。 出现以下错误:

ArgumentError in UsersController#index wrong number of arguments (0 for 1) 

用户模型

 # Search def self.search(search) if search where(["username LIKE ?", "%#{search}%"]) elsif searchtags none else all end end # Search Tags def self.searchtags(searchtags) if searchtags tagged_with(["#{searchtags}"], :any => true, :wild => true) else none end end 

用户控制器

 def index @users = User.search(params[:search]) @tagged_users = User.searchtags(params[:searchtags]) end 

用户索引视图

 = form_tag users_path, :method => 'get' do = text_field_tag :search, params[:search] = submit_tag "Search" = form_tag users_path, :method => 'get' do = text_field_tag :searchtags, params[:searchtags] = submit_tag "Search Tags" - @users.each do |user| = image_tag gravatar_for user if user.use_gravatar == true = image_tag user.avatar_filename.url if user.use_gravatar == false %h2= link_to user.username, user %p= link_to "Favorite", userfavorite_user_path(user, type: "favorite"), method: :get %p= link_to "Unfavorite", userfavorite_user_path(user, type: "unfavorite"), method: :get %p= user.tag_list - @tagged_users.each do |user| = image_tag gravatar_for user if user.use_gravatar == true = image_tag user.avatar_filename.url if user.use_gravatar == false %h2= link_to user.username, user %p= link_to "Favorite", userfavorite_user_path(user, type: "favorite"), method: :get %p= link_to "Unfavorite", userfavorite_user_path(user, type: "unfavorite"), method: :get %p= user.tag_list 

重要!

该错误仅出现在这段代码中:

 elsif searchtags none 

在用户模型中,没有它一切正常。 我需要它来防止重复。

在此先感谢您的帮助!

您是否需要一次执行两次搜索? 如果不是,我会使用这样的东西:

模型:

 # Search def self.search(search=nil) # if search is nil this will return all users where(["username LIKE ?", "%#{search}%"]) end # Search Tags def self.searchtags(searchtags) tagged_with(["#{searchtags}"], :any => true, :wild => true) end 

控制器:

 def index if params.has_key?(:searchtags) @users = User.searchtags(params[:searchtags]) else @users = User.search(params[:search]) end end 

从视图中删除@ tagged_users.each循环。

试试这个:

 def self.search(search = nil) if search where(["username LIKE ?", "%#{search}%"]) elsif searchtags none else all end end # Search Tags def self.searchtags(searchtags = nil) if searchtags tagged_with(["#{searchtags}"], :any => true, :wild => true) else none end end 

当你说elsif searchtags它实际上是试图调用定义为self.searchtags的方法。 由于该方法需要searchtags参数,因此您会看到错误。

我不确定你要检查的是什么,所以我不知道正确的方法来解决它,但我猜你需要通过将searchtags参数定义为self.searchtags(searchtags = nil)来使searchtags参数成为可选的

另外,你需要使用elsif searchtags.present? 因为none返回Relation对象。