Я просматривал Stack Overflow уже несколько часов, но ни один из связанных вопросов не относится к моей проблеме.
Я новичок в Rails, это мой первый реальный проект, и я могу немного запутаться в настройке MVC. Я пытаюсь назначить переменную экземпляра @stars, в то время как в действии поиска _controller.rb:
def create
@search = Search.new(params[:search])
tempstr = searchstr(@search)
@stars = Star.where("tempstr", :limit => 100)
end
@search
создается нормально, являясь сложным поиском с различными параметрами. tempstr
— это просто контейнер строк для результатов searchstr(@search)
, который представляет собой быстрый метод преобразования параметров поиска в MySql -релевантную строку (, что кажется проще, чем пытаться использовать.where помощник обычно, в данном случае ). Я уверен, что могу просто поместить searchstr(@search)
прямо в.where, но пока я разделил их, чтобы я мог проверять элементы по мере их прохождения.
В любом случае, проблема возникает, когда я пытаюсь вызвать @stars
в представлении show.html.erb. Даже с такой простой задачей, как :
<% @stars.each do |star| %>
<%= display stuff %>
<% end %>
, я получаю сообщение об ошибке 'each' is not a method of nil:NilClass
. Итак, я изменил его на следующее, чтобы увидеть, было ли @stars равным нулю:
<%= @stars.inspect %>
Конечно же, @stars
равно nil
. Однако, когда я добавляю эту строку в свой контроллер, чтобы проверить @stars
там :
return render @stars.each
, я вижу, что переменная заполнена правильными звездными объектами из Star.where (), как я и предполагал. Быстрый.inspect показывает, что переменная не равна нулю, когда она находится в контроллере.
Итак, я не уверен, почему представление получает его как nil, если оно было определено в контроллере просто отлично. Я не удивлюсь, если это я неправильно понял, как работает MVC. Класс Star был определен в модели Star, но, может быть, это потому, что я пытаюсь получить к нему доступ из контроллера поиска, и поэтому он не инициализирован для представления?
Должен ли я делать это каким-то другим способом? Я попытался использовать локальную переменную (, используя stars
вместо@stars
), но затем в представлении говорится: «Неопределенная локальная переменная или метод« звезды »».
Любая помощь будет очень признательна, я уже часами ломал голову, создавая сложный поиск и анализируя данные звездного файла в базе данных, так что я немного выгорел. Я могу предоставить дополнительную информацию по запросу, я не уверен, что еще было бы полезно для ответа.