2016-09-08 11 views
0

私はレールが新しく、最初のアプリケーションをコーディングしています。私はユーザー(ユーザー名またはタグのいずれか - acts_as_taggable_on gemを使用して)を検索する検索を作成しました。エラーに続いて表示されます。Rails 4 Error:ArgumentError - 引数の数が間違っています

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 

、それなしですべてが正常に動作します。重複を避けるために私はそれが必要です。

ご協力いただきありがとうございます!

答えて

1

2回の検索を同時に行う必要がありますか? 私はこのようなものを使用しない場合は、次の

モデル:

# 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ループ。

+0

あなたは私の一日を保存しました! – Gugubaight

1

はこれを試してください:あなたはelsif searchtagsを言うとき

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 
+0

これは一般的に機能します。しかし。私はページロード時に(検索なしで) 'all'要素を見ることができません。 – Gugubaight

1

実際self.searchtagsとして定義されたメソッドを呼び出すようにしようとしています。そのメソッドはsearchtags引数を渡す必要があるため、エラーが表示されています。

は、私はあなたが私はそれを修正するための正しい方法を知らないチェックしようとしているかわからないんだけど、私はあなたがself.searchtags(searchtags = nil)

としてそれを定義することによって searchtags引数をオプションにする必要があると推測しています

また、を使用する必要があります。noneRelationオブジェクトを返します。

+0

これは一般的に機能します。しかし。ページの読み込み(検索なし)のすべての要素を表示できません。 – Gugubaight

+0

@Gugubaightあなたが何を意味するか分かりません – rdubya

+0

@Gugubaightもしあなたが期待しているように偽に評価されないという問題があるなら、おそらく 'elsif searchtags.present? 'を使う必要があります。' elsif none 'がtrueに評価されました – rdubya

関連する問題