2010-12-02 6 views
1

Я пытаюсь научиться Руби, но я ГЕЕП получаю эту ошибку:Рубин на Rails Ошибка: Произошла ошибка при оценке nil.each

произошла ошибка при оценке nil.each

Я чтение здесь "начало работы" руководство http://guides.rubyonrails.org/getting_started.html

Вот кусок кода из index.html.erb:

<h1>Listing snippets</h1> 
<div class="snippets"> 
<% @posts.each do |post| %> 
    <h2><%= post.title %></h2> 
    <p><%= link_to 'View', post %> | <%= link_to 'Edit', edit_post_path(post) %> | <%= link_to 'Delete', post, :confirm => 'Are you sure?', :method => :delete %></p> 
<% end %> 
</div> 

Теперь @posts вар в posts_controller.rb

def index 
    @posts = Post.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @posts } 
    end 
    end 

Что я делаю неправильно? Спасибо.

PS: Я вижу, что они отображаются здесь http://127.0.0.1:3000/posts но что, если я хочу, чтобы отобразить их в корневой папке (http://127.0.0.1:3000/)

ответ

2

Вы должны сделать partial и поставить эту логику сообщения внутри него.

Затем вы можете поместить его на любой вид, если вы инициализируете коллекцию внутри каждого используемого действия контроллера.

Так что в вашем доме контроллера вы все равно нужно:

@posts = Post.find(:all) 

Насколько ваш первый вопрос, попробуйте найти их с помощью @posts = Post.find(:all)

1

Добавить маршрут к routes.rb (только для Rails 2.x):

map.root :controller => "posts", :action => "index" 

для Rails 3.x здесь смотрите: http://guides.rubyonrails.org/routing.html#using-root

произошла ошибка при оценке nil.each означает, что @posts не является массивом. Вы создали таблицу сообщений?

+0

Да, я могу видеть их на/сообщениях, но я думал о глобальном типе переменных для отображения в home/index.html.erb. Что-то подобное существует? – 2010-12-02 16:34:48

+0

Как вы можете видеть сообщения и получать ошибку nil.each одновременно? Что-то не имеет смысла. – 2010-12-02 20:06:10

1

ошибка (как вы, вероятно, подозревал) происходит в следующая строка:

<% @posts.each do |post| %> 

как-то @posts заканчивает тем, что ноль, несмотря на то, что мы хотим, чтобы это было список.

Это немного странно, потому что код выше выглядит так, как будто он должен работать. Я постараюсь помочь вам выявить проблему.

Post.all эквивалентен Post.find (: все), и в соответствии с the documentation for find он может вернуть нуль, но я не знаю, когда это когда-либо произойдет на практике. Обычно он должен возвращать пустой список ([]), если в базе данных нет сообщений или не возникает исключение, если таблица базы данных вообще не существует.

Так что на всякий случай Post.all каким-то образом возвращает нуль, попробуйте @posts = [] вместо @posts = Post.all в контроллере.Затем должен работать .each.

Если (как я подозреваю), это не так, я предполагаю, что какой-то другой контроллер из того, который вы опубликовали выше, выполняется. Затем, поскольку @posts никогда не был установлен, попытка доступа к нему просто даст вам нуль, что объясняет ошибку. Поэтому проверьте свои пути и имена классов и убедитесь, что код, который, по вашему мнению, запущен, запущен Фактически запускается.

Надеюсь, что поможет вам разобраться, что происходит, и сообщите нам, что решило проблему для вас!

Смежные вопросы