Дополнительная переменная экземпляра в контроллере не отображается?

Я просматривал 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), но затем в представлении говорится: «Неопределенная локальная переменная или метод« звезды »».

Любая помощь будет очень признательна, я уже часами ломал голову, создавая сложный поиск и анализируя данные звездного файла в базе данных, так что я немного выгорел. Я могу предоставить дополнительную информацию по запросу, я не уверен, что еще было бы полезно для ответа.

5
задан Xadera 11 April 2012 в 03:39
поделиться