2014-11-30 3 views
0

В онлайн-проекте bootcamp я создаю клон reddit, и я нахожусь на том этапе, где я разрабатываю поддержку для доступа к сообщениям. Вот способ отображения всех сообщений в индексе.Rails упрощает почтовый метод

def index 
    @posts = Post.all 
end 

Вот код, который создает ссылку на каждый пост, направляя пользователя в теле поста:

<% @posts.each do |post| %> 
    <p><%= link_to post.title, post_path(post.id) %></p> 
<% end %> 

Теперь текст гласит, что «Rails позволяет нам упростить этот еще один шаг вперед , позволяя нам пропустить метод post_path вообще,»и полученный код в отдельный файл заканчивается опуская post.id:

<% @posts.each do |post| %> 
    <p><%= link_to post.title, post %></p> 
<% end %> 

Как это возможно? Имеет ли Rails только предполагаемое сообщение, имеет одинаковую идентификацию в каждом элементе? Делает ли это изменение отрицательно влиять на читаемость кода?

ответ

1

Нет, он не предполагает, что идентификатор идентичен. Различные объекты для каждого link_to, поэтому разные URL-адреса для каждого link_to. Это просто более простой или, если быть точнее, более «более надежный» способ использования link_to, вот и все. Немного рельсов магии, чтобы помочь ленивым разработчикам.

link_to post.title, post такой же, как этот link_to post.title, post_path(post) или link_to post.title, post_path(post.id).

Рельсы имеют концепцию полиморфных маршрутов, которые он использует, чтобы различить, какой должен быть путь, просто используя объект post, вместо того, чтобы говорить «post_path (post)», достаточно в link_to.

Чтобы понять это, посмотрите на реализацию link_to, url_for и полиморфных маршрутов в Rails.

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