Метод фильтра, который вы используете в StatesController, является действием.Такие действия не принимают параметры.Лучший способ достичь того, что вы пытаетесь сделать, - создать такую модель под названием State.И добавьте к нему метод фильтра:
# app/models/state.rb
class State
def filter(params[:my_string])
@new_array = []
@new_array = state.each {|x| if /#my_string/i =~ x then puts x end}
return @new_array
end
end
В вашем контроллере теперь должно быть что-то вроде следующего:
class StatesController < ApplicationController
def filter
@states = State.filter(params[:sub_string])
end
end
Затем в соответствующем представлении:
<% if @states.empty? %>
<p>No matches!</p>
<% else %>
<p>
<% @states.each do |state| %>
<%= state %>
<% end %>
</p>
<% end %>
Это использует модель для загрузки массива в переменную экземпляра.Эта переменная экземпляра (начинающаяся с @) доступна в представлении, отображаемом в действии контроллера.Действие, которое мы используем, указано как фильтр.
По мнению, я проверяю, есть ли какие-либо результаты в массиве, используя пустой?метод.В противном случае я просто перебираю массив.
Теперь это будет работать только при условии, что у вас есть params [: sub_string] в заголовках.Поэтому вам нужно убедиться, что в URL-адресе указано что-то вроде ?sub_string=mystring
.
Учитывая ваш вопрос и структуру кода, я бы предположил, что вы довольно плохо знакомы с rails.Я действительно рекомендую прочитать руководство по началу работы здесь: http://guides.rubyonrails.org/getting_started.html