Получение ArgumentError неверного числа аргументов (0 для 1) - PullRequest
0 голосов
/ 05 декабря 2011

Когда я запускаю свое приложение, я получаю следующую ошибку:

ArgumentError in StatesController#filter

wrong number of arguments (0 for 1)

Мой контроллер выглядит так:

class StatesController < ApplicationController
    def filter(my_string)

        @new_array = []
        @new_array = state.each {|x| if /#my_string/i =~ x then puts x end}
        return @new_array

    end

end

И мой взгляд выглядит так:

 <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>States</title>
  </head>

  <body>

        <% States.filter(params[:substring]) %>
        <p><%= @new_array.each %></p>
        <% if @new_array.size = 0 %>
        <p>No matches!</p>

    </body>

</html>

Что не так с моим кодом?

Большое спасибо

1 Ответ

3 голосов
/ 06 декабря 2011

Метод фильтра, который вы используете в 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

...