в чому різниця між link_to, redirect_to і візуалізацією?

Я не розумію основних відмінностей між link_to , redirect_to і render у Rails. будь-хто може пояснити.

27

8 Відповіді

link_to використовується за вашим поглядом і генерує html код для посилання

<%= link_to "Google", "http://google.com" %>

Це створить у вашому перегляді наступний html

Google

redirect_to і render використовуються у вашому контролері для відповіді на запит. redirect_to буде просто перенаправляти запит на новий URL, якщо в ваш контролер ви додаєте

redirect_to "http://google.com"

будь-хто, хто має доступ до вашої сторінки, буде перенаправлено до Google

render може використовуватися багатьма способами, але в основному використовується для відображення html-переглядів.

render "article/show"

Це відобразить вигляд "app/views/article/show.html.erb"

The following link will explain the redirect_to and the render methods more in detail http://guides.rubyonrails.org/layouts_and_rendering.html

31
додано

З Документації :

Що стосується рендеринга перегляду проти перенаправлення запиту

. . . render повідомляє Rails, який переглядає (або інший актив) для побудови відповіді. Метод redirect_to робить щось зовсім інше: він повідомляє веб-переглядачу надсилати новий запит на іншу URL-адресу.

Що стосується візуалізації

. . . render: дія не виконує жодного коду в цільовій дії. . .

Щодо перенаправлення запиту

. . . Код перестає працювати і чекає на новий запит для переглядача. Так само буває, що ви повідомили веб-переглядачу, який запит він має зробити, надіславши назад код статусу HTTP 302.


В основному:

link_to is a helper method to generate URLs usually used in your views (.html.erb files)

render tells your controller to render a view without passing any data (say, from a form) to the next controller action.

redirect_to does a 302 page redirect, passing data (say, from a form) to either a controller action on your web app, or an external app (ex: google, facebook, a web article you liked, etc)

9
додано

link_to is for use in ERB templates. It outputs a link to a specific path or url.

redirect_to is for use in controllers. It causes the client to request the specified path or url once the controller method exits.

render is also for use in controllers. It causes Rails to render the specified template.

redirect_to and render may only be called once in a given controller method.

3
додано

Насправді я написав повідомлення про це в блозі . Найважливіші біти копіюються нижче (з модифікаціями).

Controller Methods: render vs. redirect_to

render and redirect_to are the two ways that controller actions end (generally speaking). To understand how they work, let's review what controllers do in a Rails app:

  • Користувач намагається отримати доступ до сторінки.
    ( http://localhost: 3000/books/index.html )
  • Під капотом веб-переглядач надсилає HTTP-запит на вказаний шлях на сервері.
    ( GET /books/index.html )
  • Система маршрутизації Rails шукає контролер, який відповідає заданому шляху запиту.
    ( книги GET /books/index(.:format) книги # індекс )
  • Контролер готує деякі дані, а потім повідомляє серверу, який відповідь ( тобто, який вміст заголовка/тіла HTTP) надсилати клієнту .

Цей останній крок випливає явно, коли ви називаєте render або redirect_to або неявно, якщо ви залишите його .

Це,

def index
  @books = Book.all
end

є таким же, як

def index
  @books = Book.all
  render :index
end

render :index says, ‘combine the data I've prepared (@books = Book.all) with the books/index.html.erb view template to generate a complete HTML document, then send that back to the client.’

redirect_to @book says, ‘tell the client to start the whole process over again, issuing a new GET request to url_for(@book).

Якщо пропустити обидва, дія буде відображати шаблон з тим же ім'ям, що й сама дія. Іншими словами, вам потрібно лише зателефонувати render , якщо бажаний шаблон перегляду не збігається з дією, з якої ви його створюєте.

Зауважте, що не кожна дія контролера має відповідний шаблон перегляду. Як правило, #create , #update і #destroy (які перенаправляються на не- GET HTTP-запити ) спробуйте внести деякі зміни до бази даних, а потім або redirect_to якийсь ресурс (якщо це вдалося) або повторно візуалізувати форму, яка передувала йому, а також помилки не вдалося).

As the official guides explain (emphasis mine),

Ці два способи [ візуалізація і redirect_to ) представляють два основні архетипи дій, які використовуються в контролерах дій: Get-and-show і < strong> do-and-redirect . Більшість дій є варіаціями цих тем.


View Methods: render vs. link_to

render is also used within view templates themselves. Rather than generating a complete HTML document, it's used to insert a partial view template into a larger one. Here's the upshot:

  • Можна створити шаблон часткового перегляду файлів, які потрібно вставити в стандартні шаблони (вважати їх модульними компонентами сторінки).
  • Імена файлів частково повинні починатися з підкреслення ( наприклад, _nav.html.erb ).
  • Використовуйте візуалізацію "nav" , якщо ви хочете включити _nav.html.erb частковий з перегляду, розташованого в тій же папці .
  • Використовуйте рендерінг "share/nav" , якщо хочете включити частково за адресою app/views/shared/_nav.html.erb з будь-якого перегляду в вашого проекту .
  • Існують різні параметри та стислий синтаксис для передачі даних у частковий, перетворення декількох часткових об'єктів у об'єкті колекції та багато іншого. Докладніше див. посібники .

link_to is just a convenience method for inserting anchor tags (a href tags) into your view templates. This is useful because a lot of the URLs you'll want to link to are other pages within your application, and those URLs can be referenced using objects or "helper methods", like so:

= link_to 'Back', books_path   # renders as Back
= link_to 'View', @book        # renders as View or similar
2
додано

З офіційних путівників :

Як ви бачили, візуалізація повідомляє Rails, який переглядає (або інший актив) для побудови відповіді. Метод redirect_to робить щось зовсім інше: він повідомляє браузеру надсилати новий запит на іншу URL-адресу.
1
додано

Link_to створює гіперпосилання на певний URL, який з'являється на HTML.

Redirect_to вирішить, куди потрібно приєднатися, залежно від певних параметрів. Наприклад, якщо хтось увійшов до системи як користувач, ви можете показати йому сторінку налаштувань, або redirect_to на домашній сторінці.

Візуалізація відкриє візуалізований файл, збереже його вміст і вставить його в існуючий файл, перш ніж відправити цілу частину одержувачу.

Сподіваюся, що я правий.

1
додано

link_to використовується у формі в межах рейку, і є помічником для створення елемента посилання в html. Два інших не використовуються у формах, а скоріше використовуються в контролерах.

Ви візуалізуєте сторінку, якщо ваш контролер пов'язаний з цією сторінкою. Напр. виклик "new" має відображати сторінку "новий елемент". Вони виконують щойно зроблений запит.

redirect is used for exactly that - redirecting. For example, if you try accessing a page where you have to be logged in, you redirect the user to the login page. So, redirects basically spawn a new request.

1
додано

link_to will output a standard html anchor=a link (link_to documentation)

redirect_to is commonly used for page responses such as update and delete. It will take the parameters you give it and will direct your page appropriately. (redirect_to documentation)

render is used for loading partials or loading specific .erb files into others. (render documentation)

There are a bunch of examples on this rails guide which should explain render and redirect_to. link_to is pretty different from rendering and redirect_to

1
додано