ПредишенСледващото

От гледна точка на контролера на има три начина за създаване на отговор HTTP:

Ние ще разкрие всеки един от тези методи в завой. Но първо малко за простите неща, които могат да направят контролера, за да се създаде отговор: да направи нищо.

По подразбиране Rendering: споразумение за конфигурация в действие

Сигурно сте чували, че Rails насърчава принципа на "конвенция над конфигурация". оказване по подразбиране - идеален пример за това. По подразбиране, контролери в Rails автоматично правят гледката с имена, които съответстват на действието. Например, ако има такъв код в класа си BooksController:

И след във файла за маршрутизация:

И вие имате vyuha приложения файл / възгледи / книги / index.html.erb:

Все пак, това съобщение минимално полезно, а скоро ще се създаде модел на книга и да добавите индекс действие в BooksController:

Отново, имайте предвид, че ние имаме споразумение по-горе конфигурация е, че няма излишък, за да направи в края на този индекс действие. Правилото е, че не е нужно нещо да се лишило в края на игри контролер за действие, релси ще изглеждат action_name.html.erb шаблон Vyuha стрелки и ще го правят, така че в този случай, Rails ще правят приложения файл / възгледи / книги / index.html .erb.

Така че, в нашата Vyuha искаме да покаже качествата на всички книги, това е направено с помощта на ERB шаблон. подобно на следното:

В действителност, представяне се извършват от подгрупи ActionView :: TemplateHandlers. Ние няма да навлизаме в този процес, но е важно да се знае, че разширяването vyuha файла на шаблона контролира избора процесор. Започвайки с релси 2, стандартното разширение е .erb за ERB (HTML с вграден Ruby) и .builder за Builder (XML генератор).

Използването направи

В много случаи методът ActionController :: Base # правят извършва много работа за оказване на съдържанието на вашата кандидатура за използване в браузъра. Има различни начини за персонализиране правят опции. Вие може да направи по подразбиране Vyuha за Rails шаблон, или конкретен модел или файл или вградена код, или нищо. Вие може да направи текстови, JSON или XML. Можете също така да определите вида на съдържанието, или състоянието на оказаната HTTP отговор.

Ако искате да видите точни резултати правят на повикване, без да се налага да го гледам в браузъра, може да доведе до render_to_string. Този метод отнема същите опции, както рендера. но вместо това се връща отговор низ към браузъра.

Не се правят личното

Най-лесният нещо, което можем да направим, за да го направи без да се изобразяват нещо:

Ако се вгледате в отговора, като се използва Curl, вижте следното:

Виждаме празен отговор (няма данни след линията Cache-Control), но Rails е поставил ОК отговор 200, така че молбата е била успешна. Можете да зададете опция: статус. За да промените тази реакция. Празен рендиране полезно за исканията на AJAX. когато всичко, което искате да се върнете в браузъра - това е потвърждение, че е направено искането.

Възможно да се използва главата метод. които смятат, че втората част на тази глава, вместо да направи: нищо. Това ще даде по-голяма гъвкавост и да е ясно, че само генерира HTTP заглавки.

Оказване vyuha екшън игри

Ако искате да се направи Vyuha според друго действие в един и същ шаблон, можете да използвате направи име vyuha:

Ако повикването не успее update_attributes, актуализиране на повикване игри за действие в този контролер ще правят edit.html.erb шаблон. собственост на една и съща контролера.

Ако искате, можете да използвате символ вместо низ да се определи на игрите за действие за предоставяне на:

За да бъдем точни, можете да използвате опцията да се направи: действие (въпреки че това не е необходимо в Rails 3.0):

Използване направи с: действие - често източник на объркване за новодошлите в релси. Някои действия се използва за определяне кой от тях гледката, но Rails не се изпълнява всеки код за това действие в контролера. Всеки един случай, променливи, които са необходими от гледна точка, трябва да бъдат идентифицирани в настоящия иск за изобразяване на повикването.

Оказване на екшън игри от друг шаблон контролер

Какво става, ако искате да се направи шаблон от съвсем различен контролер? Това също може да се направи с рендера. който отчита в пълна модел път за оказване (роднина на приложения / изглед). Например, ако ви свършат кода в AdminProductsController намира в приложението / контролери / администратор. екшън игри могат да направят в резултат на шаблона в приложението / възгледи / продукти, както следва:

Rails знае, че това vyuha притежание на друг контролер, тъй като тя съдържа наклонена черта на характера в низа. Ако искате да бъде точна, можете да използвате опция: шаблон (което се изисква в Rails 2.2 и по-рано):

Оказване на произволен файл

направи метод може да се използва Vyuha, която се намира извън вашата заявка (може би вие споделяте vyuha две приложения на Rails):

Rails реши, че това е оказване на файла към първоначалната черта характер. Ако искате да бъдем точни, можете да използвате опцията: файл (който се изисква в Rails 2.2 и по-рано):

По подразбиране файл постановено без да използвате текущата оформление. Ако искате релси, за да прехвърлите файла в текущата оформление, трябва да добавите опцията: оформление => вярно.

Ако използвате за Microsoft Windows, трябва да използвате опцията: Файл за изобразяване на файл, че имената на файловете на Windows не са същия формат, като имената на Unix файлове.

подмамени

Горните три метода за оказване (оказване на контролера в друг шаблон, шаблона в другата оказване контролер и оказване на произволен файл във файловата система) всъщност са варианти на едно и също действие.

Всъщност, методът BooksController в действие за промяна, в която искаме да направи шаблона редактирате, ако книгата не е актуализирана успешно, всички следващи разговори edit.html.erb направи шаблона в изглед / книги директорията:

Кой от тях, който използвате - това е въпрос на стил и договорености, но правилото е да се използват най-простите, което има смисъл за код и писане.

Използването направи с: инлайн

направи метод може без vyuha, ако използвате: редово в подкрепа на ERB. като част от викането на метода. Това е доста валидно:

Трябва да има добра причина да използвате тази опция. Контролерът на включване ERB нарушава MVC ориентацията на релси и го прави по-трудно за други разработчици да следват логиката на вашия проект. Вместо това, използвайте отделен Erb-Vyuha.

По подразбиране той използва вграден в оказване ERB. Можете да наложат използването на вместо с помощта на Builder опция: тип:

текст рендиране

Можете да изпратите обикновен текст - абсолютно никакъв маркиращ - обратно към браузъра с помощта на опции: текстът да стане:

Оказване на чист текст е най-полезен, когато сте прави AJAX отговор, или да отговори на исканията за услуги от Интернет очакват нещо различно от HTML.

По подразбиране, когато използвате опции: текст текстът се изобразява без да се използват понастоящем оформление. Ако искате Rails да постави текста в текущия оформление, трябва да добавите опцията: оформление => вярно

рендиране JSON

To_json не трябва да се обадите на обекта, който искате да направи. Ако се използва опцията: JSON. направи автоматично се обажда to_json за вас.

XML рендиране

Парапети също има вградена поддръжка за конвертиране на обекти за XML и оказване че XML на обаждащия се:

не To_xml трябва да се обадите на обекта, който искате да направи. Ако опцията: XML. направи автоматично се обажда to_xml за вас.

Опции за да направи

Render метод разговор обикновено отнема четири варианта:

Опция: CONTENT_TYPE

По подразбиране, Rails ще покажат резултатите от операциите за оказване на съдържание тип MIME текст / HTML (или заявка / JSON, ако използвате опцията: JSON или приложението / XML за опция :. XML). Понякога това се случва, че искате да я промените, и след това можете да настроите опцията: CONTENT_TYPE:

Опция: оформление

С по-голямата част от опции за да направи. оказаната съдържанието се показва като част от текущото оформление. Ще научите повече за оформления и как да ги използвате по-късно в това ръководство.

Опция: оформление трябва да кажете на Rails да използва определен файл като оформлението на настоящите игри за действие:

Можете също така да кажа, релси, за да правят, без оформление на всички:

Опция: статус

Rails автоматично генерира отговор с правилното състояние на HTML код (в повечето случаи, равни на 200 OK). Опция: статус може да се използва, за да се промени това:

Опция: местоположение

Опция: място може да се използва, за да настроите заглавката на HTTP Местоположение:

Търсене оформления

За да намерите текущото оформление, релси първо изглежда да е в приложението на файл / възгледи / оформления с име съвпада с името на контролера. Например, един клас на действие оказване PhotosController ще използва /app/views/layouts/photos.html.erb (или приложението / възгледи / оформления / photos.builder). Ако това не е оформлението, Rails ще използват /app/views/layouts/application.html.erb или /app/views/layouts/application.builder. Ако не оформление .erb. Rails ще използват .builder оформление. ако има такъв. Rails също предоставя няколко начина за по-точно да възлагат специфични оформления към отделни контролери и действие.

Определяне оформления за контролери
Изборът на оформления по време на изпълнение

Можете да използвате символа за отлагане на избора на план, стига искането не е направено:

Можете дори да използвате вложено метод като Proc, за да се определи разположението. Например, ако предавателната Proc обект, блок предава в Proc, се прехвърля в случай на контролера. така оформлението може да се определи въз основа на текущата заявка:

условни оформления

Оформления определят на опцията за поддръжка ниво контролер: само и: изключение. Тези опции предприемат едно име метод или масив на метод имена, съответстващи на имената на методи в контролера:

наследяване оформление

В това приложение:

Избягване на грешки правят двойни

Рано или късно, повечето релси разработчиците ще видите съобщение за грешка "Мога само да направи или да пренасочат веднъж на действие". Въпреки, че такова досадно, тя е сравнително просто правило. Обикновено това се дължи основно неразбиране на начина за работа правят.

Например, ето малко код, който ще доведе до тази грешка:

Ако @ book.special? Тя се определя като истина. Парапети процес оказване започва, разтоварване @book променлива в special_show на оглед. Но това не спира изпълнението на останалата част от кода в екшън шоуто. и когато достигне действието крайните релси, той ще започне да се направи оглед шоуто - и да генерира грешка. Решението е просто: уверете се, че имате само един призив да направи или да пренасочат с едно минаване. Все още може да помогне на такова нещо като и да се върне. Тук е коригираната версия на метода:

Уверете се, че използвате и да се върне, а не се върне. като връщане няма да работи във връзка с приоритета на операторите на езика Ruby.

Имайте предвид, че имплицитно направи извършва ActionController, той определя дали причинени направи така следния код ще работи без проблеми:

Това ще се покаже книгата с определен специален? чрез special_show шаблон. докато останалата част от книгата ще бъдат предоставени с шаблон по подразбиране шоу.

В продължение на въпросите за работа ще бъде разкрита redirect_to и главата

Подкрепете проекта - споделете линка, благодаря!