2016-10-27 10 views
0

だからこれは私のコントローラselect_tagに整数を渡す

def index 
    @tutor = Tutor.where(:admin => false) 
    @tutor = @tutor.subject_search(params[:subject_search]) if params[:subject_search].present? 
    @tutor = @tutor.fees_search(params[:fees_search]) if params[:fees_search].present? 
end 

であり、これはモデル

fees_search方法

def self.fees_search(amount) 
    @tutor ||= Tutor.where(admin: false) 
    @tutor.map do |tutor| 
     @fees = tutor.profile.fees 
     if @fees <= amount 
     #puts 'if is working' 
     @tutor = tutor 
     else 
     #puts 'else is working' 
     @tutor = nil 
     end 
     @tutor 
    end 
    end 

からのメソッドであり、これはsubject_search方法であり、

def self.subject_search(name) 
    @result = Subject.where("name LIKE ?" , "#{name}").take 
    @tutor = @result.tutors 
    end 

だから私は@tutor = Tutor.subject_search('English')のような何かを私のレールのコンソールの後に@tutor.fees_search(20)と私は結果を得ることができます。しかし

私のインデックスビューで行われ、私は、ブラウザでの検査時に

<%= label_tag 'fees_search', 'Fees' %> 
<%= select_tag 'fees_search', options_from_collection_for_select(, :selected => params[:fees_search]), :include_blank => true, class:'form-control' %> 
<%= submit_tag 'Filter', class: 'btn btn-primary btn-xs' %> 

はそして、私は<option value = "10">を参照してくださいフォーム内のビューに基づいてcomparison of Fixnum with String failed

ので、エラーが表示される(とそう何かを推測することがエラーが出てくる理由ですか?その場合、どうすればselect_tagintegerの値を代わりに出力することができますか?

また、件名や手数料をフィルタリングするためのより洗練されたソリューションがありますか?私は関係を掲示する必要がありますか?

答えて

1

PARAMS値は常にあなたがto_i

@tutor = 
    @tutor.fees_search(params[:fees_search].to_i) if params[:fees_search].present? 

を使用して整数にPARAM値を変換する必要がある文字列になりますか、方法自体に整数に変換することができます。

if @fees <= amount.to_i # This is where actually you are getting the error 
    @tutor = tutor 
else 
    @tutor = nil 
end 

これにより、期待した結果が得られます。