2015-02-19 2 views
-1
<h1>Listing categories</h1> 

<table> 
    <thead> 
    <tr> 
     <th>Name</th> 
     <th>Thumburl</th> 
     <th colspan="3"></th> 
    </tr> 
    </thead> 

    <tbody> 
    <% @categories.each do |category| %> 
     <tr> 
     <td><%= category.name %></td> 
     <td><%= category.thumburl %></td> 
     <td><%= link_to 'Show', category_path(category) %></td> 
     <td><%= link_to 'Edit', edit_category_path(category) %></td> 
     <td><%= link_to 'Destroy', category, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
     </tr> 
    <% end %> 
    </tbody> 
</table> 


Как работает ссылка в документе html.erb?

<%= link_to 'New Category', new_category_path %> 

Итак, как я уже говорил в моем последнем посте я пытаюсь пройти через Руби код, как я нахожу его на RoR учебник Codecademy в. Поскольку у них есть такой простой учебник, я полагаю, было бы смешно не понимать все, что они бросают на меня.

В этом бите у них есть файл html.erb, который должен формировать отображаемый вид. Мне все кажется ясным, пока они не доберутся до <tbody>.

Здесь, во-первых, мы повторяем переменную экземпляра @categories ... now, где эта переменная экземпляра найдена, я не знаю. Я думал, что переменные экземпляра означают, что они могут использоваться только в определенном классе, но это страница разметки, т. Е. Классы не определены, так как Ruby знает, где и что такое переменная этого экземпляра?

Далее: так, как я понимаю, слово «категория» здесь служит переменной, поскольку оно было указано как таковое синтаксисом канала двумя строками ранее. Теперь, можно ли использовать эту переменную за пределами этой страницы html.erb вне меня, потому что я думал, что переменные экземпляра были обозначены символом «@». С помощью этой переменной мы вызываем метод 'name'. Итак, «имя» - это настраиваемый метод, и если да, то где он определен?

В настоящее время третий тег <td> содержит код, который сообщает Ruby, чтобы ссылаться на какое-то имя «Показать», но я не уверен, что это имя указывает на ... также, «category_path» - это метод, который мы определили в нашей routes.rb, и у него есть параметр нашей категории заблокированных переменных.

Наконец, конечные ссылки ряда клеток к некоторому имени «Destroy», но этот синтаксису запятой является то, что я не видел раньше:

<td><%= link_to 'Destroy', category, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
+0

http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to – Joel

+0

Категория является переменной содержащий элемент в коллекции @categories, который был бы создан контроллером категорий. Это «существование» на протяжении каждого цикла .do/end. Следующая итерация, это другой элемент из коллекции. Вне цикла он не существует. Помощники пути к категории используют некоторую магию Rails, где, если вы передаете ей объект, а путь требует идентификатора, он использует атрибут ID этого объекта (category.id, а не идентификатор объекта). – railsdog

ответ

0

переменного экземпляра @categories должен быть определен в CategoriesController, который является подклассом контроллера действия. Переменные экземпляра Ruby не являются постоянными, и любые видимые переменные, определенные в действии контроллера, доступны в представлении действия. Я не уверен, если вы знакомы с паттернами MVC, и если нет, то вы можете взглянуть на этот вопрос:

What is MVC in Ruby on Rails?

Имя является атрибутом ресурса/модели категории. Вы должны увидеть его класс в app/model/category.rb. Это подкласс ActiveRecord, который действует как оболочка базы данных по вашему выбору. Таким образом, у вас, вероятно, есть таблица базы данных, называемая категориями с именем столбца «имя».

И как упоминалось @JoelL, link_to являются помощниками вида, которые предназначены для упрощения вашего синтаксиса в файлах вида, делают ваш код более организованным и экономит ваше время. Вы можете определить свой собственный помощник вида в приложении/помощниках. Некоторые из помощников автоматически создаются для вас, когда вы определяете ресурсы: resource_name в config/routes.rb. В этом случае у вас, вероятно, есть ресурсы: категории в вашем config/routes.rb

+0

спасибо! Я займусь этим вопросом. –

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