Я примерно на полпути через главу 11 учебного пособия Хартл, где он показывает, как добавить фид микросоты на домашнюю страницу. Он делает это через код:Почему подача недействительного сообщения прерывает фид микросообщения (глава 11)?
@feed_items = current_user.feed.paginate(page: params[:page])
где корм метод
def feed
Micropost.where("user_id = ?", id)
end
Теперь в домашней странице, где предполагают подачу micropost, чтобы быть у вас есть частичный, содержащий:
<% if @feed_items.any? %>
<ol class="microposts">
<%= render @feed_items %>
</ol>
<%= will_paginate @feed_items %>
<% end %>
Теперь в учебнике упоминается, что на домашней странице, если вы отправите недопустимую микросоту, она сломается:
"при неудачной подаче микропотоков на главной странице ожидается переменная экземпляра @feed_items , поэтому в настоящее время не удалось выполнить пропущенные представления."
Я не понимаю объяснения, почему это происходит. Должно ли @feed_items
состоять из всех других допустимых микросообщений из базы данных? Так что, даже если вы отправляете недопустимый пост, @feed_items заполняется предыдущими действительными микропостями? Я не понимаю, как недействительная микропость способна повлиять на @feed_items, тем более что @feed_items извлекает микросоты из базы данных, которая содержит только действительные микропосты из-за валидаций, присутствующих на представленных микросостах.
Я не совсем уверен, как @feed_items становится нулевым, так как он рисует микросоты из базы данных, которая имеет действительные микропосты. Могу ли я что-то здесь что-то здесь? – user2889046
Потому что, если подача заявки на микросопротивление терпит неудачу, тогда у вас не будет действительного 'id' в ваших' params', поэтому ваш метод 'feed' не будет работать, поэтому ваши' @ feed_items' не будут заполнены. Теперь ясно? –
Да, спасибо за помощь – user2889046