簡體   English   中英

Rails 4錯誤:ArgumentError-錯誤的參數數目

[英]Rails 4 Error: ArgumentError - wrong number of arguments

我是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

在用戶模型中,沒有它,一切都將正常運行。 我需要它,以防止重復。

在此先感謝您的幫助!

嘗試這個:

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對象。

您是否需要一次執行兩次搜索? 如果沒有的話,我會使用這樣的東西:

模型:

# 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循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM