[英]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.