Ruby on Rails: добавление пользователя для входа в мое существующее приложение убило мой индекс

У меня есть приложение, которое я разрабатывал и которое до сих пор было только одной пользовательской средой. Наконец-то я дошел до того, что мне нужно было добавить многопользовательские возможности, поэтому я следил за рельсовой трансляцией на authlogic, чтобы получить простой логин.

Затем я добавил has_many :items, accepts_nested_attributes_for :items и belongs_to :user к правильным моделям. Затем я удалил базу данных и настройку, а затем перенес ее. Я также добавил столбец user_id ко всем моим вложенным моделям.

После этого, когда я нажимаю на ссылку "Создать новый элемент", я перехожу на новую страницу и создаю новый элемент. Когда я возвращаюсь на страницу item_index, она больше не отображается. Я могу перейти на localhost/item/1 и посмотреть запись, поэтому я знаю, что она создается, но когда я пытаюсь просмотреть ее в своем item_index.html.erb, она больше не отображается.

Вот основной цикл, который работал до того, как я добавил пользователя. (Он рендерится в таблицу)

<% for item in @items %>
    <%= link_to item.name, item %>
<% end %>

Я предполагаю, что петля - это то, что не так, но я не совсем уверен.

Спасибо

edit: вот что происходит в моем методе index в моем контроллере элементов:

   def index
     @items = Item.search params[:search]
     if @items.nil?
       @items = Item.all
     end
   end

У меня есть странная вещь if nil?, потому что я использую Thinking-sphinx, и иногда он терпел неудачу, если индекс был пуст.

редактировать2:

Если я изменю индекс, чтобы иметь только

def index
   @items = Item.all
end

Все появляется. Так что это означает, что это связано с тем, что сфинкс думает, что он возится с моим рендером.

edit3: в стиле мыслящего сфинкса я сделал некоторые вещи, не связанные с этим, и он снова волшебным образом работает.


person Reti    schedule 16.08.2010    source источник


Ответы (1)


Думая, что Sphinx будет возвращать пустой набор результатов [], когда вы попытаетесь выполнить итерацию по этому пустому набору, вы не получите никаких отображаемых элементов.

Насколько мне известно, Thinking Sphinx никогда не возвращает nil в качестве результата поиска.

Возможно, попробуйте это вместо этого:

if @items.empty?
  @items = Item.all
end
person Ryan Bigg    schedule 16.08.2010
comment
Кроме того, я попытался сделать for item in @items; item.name; end; в консоли рельсов, и он сказал, что у меня есть нулевой объект, когда я этого не ожидал. Если я выполню Item.all, он покажет мои предметы. - person Reti; 16.08.2010
comment
@Reti: я обновил свой ответ, чтобы отразить ваши изменения. Он должен четко ответить на ваш вопрос. - person Ryan Bigg; 16.08.2010
comment
Если Item.search возвращает массив с нулевыми записями, ваш индекс не синхронизирован с вашей базой данных. Попробуйте переиндексировать и перезапустить демон sphinx. - person James Healy; 16.08.2010