2015-08-05 5 views
2

Недавно я обновил приложение Rails с 4.0 до 4.1. Кажется, все работает нормально, кроме этой одной строки в моей модели Resource_Tag, которая работала раньше.params [: search] error после обновления до Rails 4.1

По сути, я хочу найти/найти District_Resources по имени тега и по имени District_Resource.

**ex.** 
If I search the word "Tutoring" 
*I should get all District_Resources with the Resource_Tag "Tutoring" 
*And all District Resources that include the word Tutoring in it's Name. 
(i.e Tutoring Services) 

По какой-то причине, я получаю эту ошибку:

wrong number of arguments (1 for 0) 
all(:conditions => (string ? [cond_text, *cond_values] : [])) 

CONTROLLER

class ResourceTagsController < ApplicationController 

    def index  
    if params[:search].present? 

     #Calls Search Model Method 
     @resource_tags = ResourceTag.search(params[:search]) 
     @tagsearch = ResourceTag.search(params[:search]) 
     @tag_counts = ResourceTag.count(:group => :name, 
     :order => 'count_all DESC', :limit => 100) 
    else 
     @resource_tags = ResourceTag.all 
    end 
    end 

end 

МОДЕЛИ

class DistrictResource < ActiveRecord::Base 

    has_many :district_mappings, dependent: :destroy 
    has_many :resource_tags, through: :district_mappings 

    accepts_nested_attributes_for :resource_tags 
end 

class ResourceTag < ActiveRecord::Base 

    #create relationships with all resource and mapping models 
    has_many :district_mappings, dependent: :destroy 
    has_many :district_resources, through: :district_mappings 

    #I GET AN ERROR HERE 
    def self.search(string) 
    return [] if string.blank? 

    cond_text = string.split(', ').map{|w| "name like ?"}.join(" OR ") 

    cond_values = string.split(', ').map{|w| "%#{w}%"} 

    all(:conditions => (string ? [cond_text, *cond_values] : [])) 
    end 

end 

МНЕНИЯ

<%= form_tag(resource_tags_path, :method => 'get', class: "navbar-search") do %> 
    <form> 
    <%= text_field_tag :search, params[:search], :class => "search-query form-control" %> 
    <%= submit_tag "Search", :name => nil, :class => "search-button" %> 
    </form> 
<% end %> 
+2

Недостаточно ответа, но в Rails 4 все (условия) 'migth устарели. Независимо от того, следует ли использовать 'where (attr1: value, attr2: value)' – onebree

+0

Можете ли вы рассказать мне значение 'params [: search]', для которого эта ошибка возникает? –

+0

«search» => «Наставничество, репетиторство» –

ответ

1

После часа поиска я узнал, что в рельсах 4,1 вперед all метод ActiveRecord не принимает никаких параметров, поэтому возникает дополнительный аргумент ошибки. Вместо этого вы можете попробовать where. Вы искали:

def search(string) 

return [] if string.blank? 

cond_text = string.split(', ').map{|w| "name like ?"}.join(" OR ") 

cond_values = string.split(', ').map{|w| "%#{w}%"} 

self.where(string ? [cond_text, *cond_values] : []) 

end 
+0

Я пытаюсь это, но почему-то он возвращает каждое значение, как и высказывание self.all – unclesol

+0

Что вы переходите к методу 'search' как параметру? –