<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF108:Rails - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF108:Rails&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 19:30:44 GMT</lastBuildDate>
		<item>
			<title>Yaleks: /* Просмотр фотографий */</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF108:Rails&amp;diff=8541&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Просмотр фотографий&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 17:02, 24 августа 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 264:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 264:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:LXF108 69 2.png|400px|right]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:LXF108 69 2.png|400px|right]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Контроллер ApplicationController определяется в файле app/controllers/application.rb и наследует от ActionController::Base. Это действие, которое по умолчанию визуализирует шаблон app/views/photos/index.erb.html. PhotosController доступен по адресу http://localhost:3000/&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Контроллер ApplicationController определяется в файле app/controllers/application.rb и наследует от ActionController::Base. Это действие, которое по умолчанию визуализирует шаблон app/views/photos/index.erb.html. PhotosController доступен по адресу http://localhost:3000/photos. Чтобы миниатюры не выводились на индексной странице, контроллер нужно изменить. Отредактируйте файл app/controllers/photos_controller.rb так, чтобы вывод индекса игнорировал миниатюры, где-то&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;photos. Чтобы миниатюры не выводились на индексной странице, контроллер нужно изменить. Отредактируйте файл app/controllers/photos_controller.rb так, чтобы вывод индекса игнорировал миниатюры, где-то&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;в строке 5:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;в строке 5:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; @photos = Photo.find(:all, :conditions =&amp;gt; ‘thumbnail is NULL’)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt; @photos = Photo.find(:all, :conditions =&amp;gt; ‘thumbnail is NULL’)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 24 Aug 2009 17:02:40 GMT</pubDate>			<dc:creator>Yaleks</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF108:Rails</comments>		</item>
		<item>
			<title>Yaleks в 17:01, 24 августа 2009</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF108:Rails&amp;diff=8540&amp;oldid=prev</link>
			<description>&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 17:01, 24 августа 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 88:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 88:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== Часть 2 Приступаем к делу ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== Часть 2 Приступаем к делу ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Заголовок=Скорая помощь&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Содержание=Добавьте set incsearch в ваш vimrc для поиска по мере ввода текста и используйте Ctrl+P для подстановки.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Ширина=100px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:LXF108 67 2.png|400px|right]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:LXF108 68 1.png|400px|right]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Теперь пора показать, какая это стоящая и простая штука – разработка с Rails. Rails содержит средства генерации скелетных файлов,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Теперь пора показать, какая это стоящая и простая штука – разработка с Rails. Rails содержит средства генерации скелетных файлов,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;позволяющих создавать полнофункциональные приложения, а также&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;позволяющих создавать полнофункциональные приложения, а также&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 152:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 158:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Добавляем стиль ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Добавляем стиль ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Заголовок=Попробуйте Ruby |Содержание=Вы новичок в Ruby и хотите попробовать язык, ничего не устанавливая? Try Ruby (http://tryruby.hobix.com) – это web-консоль Ruby, с помощью которой можно попробовать язык в браузере.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Ширина=200px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Генератор каркаса создал файл app/views/layouts/photos.html.erb. В&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Генератор каркаса создал файл app/views/layouts/photos.html.erb. В&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;директории раскладок сайта находятся различные HTML-шаблоны.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;директории раскладок сайта находятся различные HTML-шаблоны.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 186:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 195:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Просмотр фотографий ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Просмотр фотографий ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Заголовок=Искусное редактирование текста в Linux&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Содержание=Большинство обучающих роликов по Rails&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;записаны в TextMate и Mac OS X. Пользователи&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Linux могут сделать примерно то же самое (и,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;возможно, пойти дальше), используя Vim с&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;этими замечательными модулями расширения&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;и возможностями самого Vim:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* Project Быстро систематизирует файлы проекта Rails и производит поиск в них: http://vim.sourceforge.net/scripts/script.php?script_id=69.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* PMiniBufExplorer Добавляет вкладки для быстрого переключения между открытыми файлами: www.vim.org/scripts/script.php?script_id=159.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Ширина=250px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Перед тестированием нужно исправить виды ‘photo edit’ и ‘new’, активировав в них загрузку файлов. Откройте views/photos/edit.html.erb и&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Перед тестированием нужно исправить виды ‘photo edit’ и ‘new’, активировав в них загрузку файлов. Откройте views/photos/edit.html.erb и&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;views/photos/new.html.erb и измените определение формы на следующее (это просто стенографическая запись Rails для HTML-кода):&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;views/photos/new.html.erb и измените определение формы на следующее (это просто стенографическая запись Rails для HTML-кода):&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 243:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 263:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;оба вернут /photos.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;оба вернут /photos.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:LXF108 69 2.png|400px|right]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Контроллер ApplicationController определяется в файле app/controllers/application.rb и наследует от ActionController::Base. Это действие, которое по умолчанию визуализирует шаблон app/views/photos/index.erb.html. PhotosController доступен по адресу http://localhost:3000/&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Контроллер ApplicationController определяется в файле app/controllers/application.rb и наследует от ActionController::Base. Это действие, которое по умолчанию визуализирует шаблон app/views/photos/index.erb.html. PhotosController доступен по адресу http://localhost:3000/&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;photos. Чтобы миниатюры не выводились на индексной странице, контроллер нужно изменить. Отредактируйте файл app/controllers/photos_controller.rb так, чтобы вывод индекса игнорировал миниатюры, где-то&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;photos. Чтобы миниатюры не выводились на индексной странице, контроллер нужно изменить. Отредактируйте файл app/controllers/photos_controller.rb так, чтобы вывод индекса игнорировал миниатюры, где-то&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 266:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 287:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Стили фотографий ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==== Стили фотографий ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Заголовок=Скорая помощь&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Содержание=Vim 7 поддерживает&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;вкладки с :h tabnew.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;|Ширина=70px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Таблицы стилей хранятся в каталоге public/stylesheets. Добавьте туда&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Таблицы стилей хранятся в каталоге public/stylesheets. Добавьте туда&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;файл screen.css:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;файл screen.css:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Mon, 24 Aug 2009 17:01:53 GMT</pubDate>			<dc:creator>Yaleks</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF108:Rails</comments>		</item>
		<item>
			<title>Yaleks: Новая: == Rails: Создаем фотоальбом == : ''Страшитесь C? Путаетесь в Perl? Пусть '''Алекс Янг''' покажет вам, как просто и ...</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF108:Rails&amp;diff=8498&amp;oldid=prev</link>
			<description>&lt;p&gt;Новая: == Rails: Создаем фотоальбом == : ''Страшитесь C? Путаетесь в Perl? Пусть '''Алекс Янг''' покажет вам, как просто и ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Rails: Создаем фотоальбом ==&lt;br /&gt;
: ''Страшитесь C? Путаетесь в Perl? Пусть '''Алекс Янг''' покажет вам, как просто и быстро начать программировать на Ruby.''&lt;br /&gt;
&lt;br /&gt;
С момента своего создания фотогалерея Flickr поразительно&lt;br /&gt;
разрослась. Она полностью изменила наши представления о&lt;br /&gt;
хранении снимков в Интернете, а через ее каталоги каждый&lt;br /&gt;
посетитель мог достаточно просто найти самые интересные фотографии. Но как ни хороша Flickr, разве не здорово иметь на своем сайте&lt;br /&gt;
личную фотогалерею? Можно реализовать те возможности, которые&lt;br /&gt;
нужны именно вам, и даже поделиться кодом с друзьями, чтобы они&lt;br /&gt;
тоже создали себе нечто подобное.&lt;br /&gt;
&lt;br /&gt;
Для написания классной, продвинутой галереи мы воспользуемся&lt;br /&gt;
Ruby on Rails. Rails избавляет вас от мучений, присущих обычной web-разработке – можете забыть о мороке с SQL и XML; Rails предоставляет&lt;br /&gt;
простые и удобные для восприятия абстракции через дружелюбный к&lt;br /&gt;
программисту код Ruby. Его легко установить – потребуются лишь база&lt;br /&gt;
данных и web-сервер; и web-разработка упрощается, благодаря наличию готовой структуры для каждого приложения.&lt;br /&gt;
&lt;br /&gt;
Rails испытывает влияние популярных методологий: Не Повторяй&lt;br /&gt;
Самого Себя (Don’t Repeat Yourself – DRY) и Разработка Через&lt;br /&gt;
Тестирование (Test Driven Development – TDD). DRY предполагает,&lt;br /&gt;
что код не должен дублироваться, и это уменьшает общую сложность проекта. TDD часто практикуется профессиональными Rails-разработчиками: данный метод подразумевает тестирование кода до&lt;br /&gt;
его завершения. Написание тестов до того, как написано само приложение, часто способствует разработке более API-подобного кода с&lt;br /&gt;
более ясной инкапсуляцией.&lt;br /&gt;
&lt;br /&gt;
Мы рассмотрим некоторые технологии, используемые Rails-разработчиками в реальных проектах:&lt;br /&gt;
* Установим Ruby on Rails с библиотеками и модулями расширения для обработки изображений.&lt;br /&gt;
* Создадим фотогалерею с миниатюрами и возможностью управления пользователями.&lt;br /&gt;
* Ознакомимся с основными компонентами каркаса Rails.&lt;br /&gt;
&lt;br /&gt;
=== Часть 1 Устанавливаем Rails ===&lt;br /&gt;
Первая установка Rails кажется сложнее, чем она есть на самом деле –&lt;br /&gt;
ведь познакомиться придется всего лишь с несколькими технологиями&lt;br /&gt;
(если вы уже не программист Ruby!). Чтобы установить Rails, отвечающий потребностям нашего проекта, потребуются пять компонентов:&lt;br /&gt;
* Ruby.&lt;br /&gt;
* RubyGems.&lt;br /&gt;
* Ruby on Rails: http://rubyonrails.org.&lt;br /&gt;
* Реляционная СУБД – MySQL, PostgreSQL, SQLite (сегодня мы будем пользоваться SQLite).&lt;br /&gt;
* Прочие библиотеки для обработки изображений и работы с Rails.&lt;br /&gt;
Минут через 15 все должно быть готово к написанию кода.&lt;br /&gt;
&lt;br /&gt;
Для начала нужно проверить, установлен ли Ruby: команда which&lt;br /&gt;
ruby выведет путь к интерпретатору. Если его у вас нет, понадобится&lt;br /&gt;
пакет Ruby, и он есть в большинстве дистрибутивов Linux. В Debian и&lt;br /&gt;
Ubuntu Ruby можно установить с помощью команды&lt;br /&gt;
 sudo apt-get install ruby1.8&lt;br /&gt;
Желаете собрать Ruby из исходников? Загрузите их с сайта http://www.rubylang.org/en. Затем вам понадобится RubyGems – менеджер пакетов, с помощью которого можно устанавливать, удалять и обновлять&lt;br /&gt;
библиотеки Ruby. В большинстве дистрибутивов Linux есть пакет для&lt;br /&gt;
RubyGems: например, в Debian и Ubuntu это libgems-ruby1.8. Однако на&lt;br /&gt;
момент написания статьи пакеты в этих дистрибутивах сильно устарели и не будут корректно работать с Rails 2, поэтому лучше установите&lt;br /&gt;
Gems из исходных текстов.&lt;br /&gt;
&lt;br /&gt;
Загрузите архив с сайта http://www.rubygems.org и распакуйте его, а затем&lt;br /&gt;
запустите из получившегося каталога следующую команду:&lt;br /&gt;
 sudo ruby setup.rb&lt;br /&gt;
Она установит команду gem1.8 и связанные с ней библиотеки.&lt;br /&gt;
&lt;br /&gt;
После установки RubyGems добавление Rails – сущий пустяк.&lt;br /&gt;
Следующая команда инсталлирует все необходимые библиотеки Ruby,&lt;br /&gt;
а также утилиты командной строки Rails:&lt;br /&gt;
 sudo gem1.8 install rails rake&lt;br /&gt;
Для хранения данных моделей Rails также необходима реляционная&lt;br /&gt;
БД. Если вам кажется, что сервер СУБД на рабочем столе – излишество, есть прекрасная альтернатива для локальной разработки – SQLite&lt;br /&gt;
(http://www.sqlite.org). Удостоверьтесь, что установлены как SQLite, так и ее&lt;br /&gt;
библиотеки для разработчиков. Для этого выполните команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install sqlite3&lt;br /&gt;
sudo apt-get install libsqlite3-dev&lt;br /&gt;
sudo gem1.8 install sqlite3-ruby&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Убедимся, что все работает ====&lt;br /&gt;
Теперь давайте проверим, что Rails установлен корректно. Чтобы&lt;br /&gt;
начать проект Rails, просто наберите rails gallery – при этом будут созданы все необходимые каталоги и файлы конфигурации:&lt;br /&gt;
&amp;lt;pre&amp;gt;rails gallery&lt;br /&gt;
cd gallery&lt;br /&gt;
script/server&amp;lt;/pre&amp;gt;&lt;br /&gt;
Последняя строка запускает web-сервер на Ruby, его можно&lt;br /&gt;
использовать при разработке проекта. Откройте запущенный проект&lt;br /&gt;
в браузере (http://localhost:3000). Вы должны увидеть страницу приглашения Rails. Пусть она висит в фоне, пока вы заняты этим уроком.&lt;br /&gt;
Согласно настройкам БД по умолчанию, в подкаталоге db/ каталога&lt;br /&gt;
проекта будет автоматически создана база данных SQLite3. Если вы&lt;br /&gt;
хотите использовать вместо нее MySQL или Postgres, отредактируйте&lt;br /&gt;
файл config/database.yml, указав в нем настройки своей БД. Убедитесь,&lt;br /&gt;
что переменная adapter установлена в mysql или postgresql.&lt;br /&gt;
&lt;br /&gt;
Наконец, фотогалерея будет бесполезной, если в ней не будет базовых возможностей обработки изображений. Для создания высококачественных миниатюр, воспользуемся библиотеками Rails ImageMagick&lt;br /&gt;
и RMagick:&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt-get install libmagick9-dev&lt;br /&gt;
sudo gem install rmagick&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Часть 2 Приступаем к делу ===&lt;br /&gt;
Теперь пора показать, какая это стоящая и простая штука – разработка с Rails. Rails содержит средства генерации скелетных файлов,&lt;br /&gt;
позволяющих создавать полнофункциональные приложения, а также&lt;br /&gt;
поддерживает модули расширения. Мы воспользуемся и тем, и другим, чтобы написать галерею быстрее, чем разработчик на C# загрузит&lt;br /&gt;
Visual Studio.&lt;br /&gt;
&lt;br /&gt;
Если бы я сел и написал набор утилит для управления пользователями, у меня бы вышло нечто очень похожее на модуль Restful&lt;br /&gt;
Authentication Рика Олсона [Rick Olson] – ну так сэкономим время и&lt;br /&gt;
усилия и сразу возьмем его. Из подкаталога gallery/ каталога проекта&lt;br /&gt;
выполните команды:&lt;br /&gt;
&amp;lt;pre&amp;gt;script/plugin source http://svn.techno-weenie.net/projects/plugins&lt;br /&gt;
script/plugin install restful_authentication&lt;br /&gt;
script/generate authenticated user sessions&amp;lt;/pre&amp;gt;&lt;br /&gt;
Модуль Restful Authentication предоставляет: модель БД для пользователя; миграции БД для создания пользователя; контроллеры пользователя и сессии для обработки создания учетной записи, вход в&lt;br /&gt;
систему и запоминание пользователя в cookies.&lt;br /&gt;
&lt;br /&gt;
Модули устанавливаются в подкаталог vendor/plugins/ каталога&lt;br /&gt;
проекта. Данный конкретный экземпляр также добавляет файлы в код&lt;br /&gt;
проекта в каталоге app/ с помощью генератора.&lt;br /&gt;
&lt;br /&gt;
Теперь откроем файл app/models/user.rb и рассмотрим код модуля.&lt;br /&gt;
Он представляет несколько общеупотребимых технологий для управления объектами ActiveRecord. ActiveRecord – одна из основных частей&lt;br /&gt;
каркаса: она отображает объекты Ruby на базу данных.&lt;br /&gt;
&lt;br /&gt;
Даже с небольшим опытом в Ruby или его полным отсутствием вы&lt;br /&gt;
должны понять следующий код:&lt;br /&gt;
 validates_presence_of :login, :email&lt;br /&gt;
 before_save :encrypt_password&lt;br /&gt;
Эти строки – на самом деле методы, которые выглядят как макросы; это общепринятый стиль в Rails. С помощью методов validates_&lt;br /&gt;
легко проверить поля перед их сохранением в базе данных. Метод&lt;br /&gt;
before_save реализует жизненный цикл объекта – он позволяет вам&lt;br /&gt;
выполнять свой собственный код при сохранении данных в базе. Здесь&lt;br /&gt;
перед записью модели в БД будет вызван метод encrypt_password.&lt;br /&gt;
&lt;br /&gt;
Прежде чем продолжить, запустите процедуру миграции, полученную от модуля:&lt;br /&gt;
 rake db:migrate&lt;br /&gt;
Она выведет некоторые данные о таблице:&lt;br /&gt;
&amp;lt;pre&amp;gt;1 CreateUsers: migrating&lt;br /&gt;
-- create_table(“users”, {:force=&amp;gt;true})&lt;br /&gt;
-&amp;gt; 0.0044s&lt;br /&gt;
1 CreateUsers: migrated (0.0046s)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Добавим пользователя и зайдем ====&lt;br /&gt;
Но как нам воспользоваться тем, что мы успели добавить? К счастью,&lt;br /&gt;
модуль Restful Authentication установил контроллер, поддерживающий&lt;br /&gt;
создание пользователя. Контроллеры – другая важная часть Rails:&lt;br /&gt;
здесь они известны как ActionControllers и находятся между HTML-шаблонами и моделями ActiveRecord.&lt;br /&gt;
&lt;br /&gt;
Чтобы добавить пользователя, зайдите на http://localhost:3000/users/new в своем браузере и введите необходимые данные. Затем&lt;br /&gt;
укажите выбранное вами имя на http://localhost:3000/sessions/new.&lt;br /&gt;
Вы будете отосланы на страницу шаблона Rails, но после добавления&lt;br /&gt;
фотографий мы это исправим. Выполните команду:&lt;br /&gt;
&amp;lt;pre&amp;gt;script/generate scaffold photo title:string description:text filename:&lt;br /&gt;
string content_type:string size:integer user_id:integer width:&lt;br /&gt;
integer height:integer parent_id:integer path:string thumbnail:string&lt;br /&gt;
rake db:migrate&amp;lt;/pre&amp;gt;&lt;br /&gt;
Будут добавлены: модель Photo; таблица в БД для фотографий с ID&lt;br /&gt;
(создается автоматически) и набором необходимых полей; контроллер&lt;br /&gt;
PhotosController с действиями по просмотру, созданию, обновлению и&lt;br /&gt;
удалению фотографий; и сопутствующие представления (виды). Чтобы&lt;br /&gt;
взглянуть на результаты, откройте адрес http://localhost:3000/photos.&lt;br /&gt;
Хотя это и работает, но выглядит не очень. Опять же и контроллер&lt;br /&gt;
пользователя не сочетается с сайтом. Давайте решим эти проблемы…&lt;br /&gt;
&lt;br /&gt;
==== Добавляем стиль ====&lt;br /&gt;
Генератор каркаса создал файл app/views/layouts/photos.html.erb. В&lt;br /&gt;
директории раскладок сайта находятся различные HTML-шаблоны.&lt;br /&gt;
Используйте только один для вашего приложения, и он будет разделен&lt;br /&gt;
между контроллерами.&lt;br /&gt;
&lt;br /&gt;
Все контроллеры по умолчанию используют шаблон application.&lt;br /&gt;
html.erb, если не задано иное, поэтому переименуйте photos.html.erb в&lt;br /&gt;
application.html.erb, откройте его и измените содержимое тэга &amp;lt;title&amp;gt; на&lt;br /&gt;
что-нибудь более общее. Открыв http://localhost:3000/users в своем браузере, вы увидите пользовательские шаблоны с application.html.erb.&lt;br /&gt;
&lt;br /&gt;
Теперь нужно лишь задать индексную страницу сайта. Используем&lt;br /&gt;
в качестве нее список фотографий. Удалите файл public/index.html,&lt;br /&gt;
который был установлен Rails, и добавьте следующую строку в файл&lt;br /&gt;
config/routes.rb:&lt;br /&gt;
 map.connect ‘’, :controller =&amp;gt; ‘photos’&lt;br /&gt;
Rails предоставляет все, что нужно для обработки загрузки файлов.&lt;br /&gt;
Однако вместо реализации ее в PhotosController (сокращение контроллера и повторное использование кода в моделях – хорошая практика),&lt;br /&gt;
можно поместить большую часть в модель Photo. Так как все загрузки файлов обрабатываются в общем-то одинаково, для добавления в&lt;br /&gt;
модель необходимого функционала можно воспользоваться модулем&lt;br /&gt;
расширения. Установите модуль attachment_fu:&lt;br /&gt;
 script/plugin install attachment_fu&lt;br /&gt;
Теперь откройте модель Post (app/models/post.rb) и настройте его:&lt;br /&gt;
&amp;lt;pre&amp;gt;class Photo &amp;lt; ActiveRecord::Base&lt;br /&gt;
has_attachment :storage =&amp;gt; :file_system,&lt;br /&gt;
:thumbnails =&amp;gt; { :thumb =&amp;gt; ‘160&amp;gt;’ },&lt;br /&gt;
:content_type =&amp;gt; :image&lt;br /&gt;
validates_as_attachment&lt;br /&gt;
end&amp;lt;/pre&amp;gt;&lt;br /&gt;
Открыв модель Photo, добавьте следующую строку:&lt;br /&gt;
 belongs_to :user&lt;br /&gt;
Будет установлена связь между фотографиями и пользователями.&lt;br /&gt;
Также можно добавить has_many :photos в модель User.&lt;br /&gt;
&lt;br /&gt;
==== Просмотр фотографий ====&lt;br /&gt;
Перед тестированием нужно исправить виды ‘photo edit’ и ‘new’, активировав в них загрузку файлов. Откройте views/photos/edit.html.erb и&lt;br /&gt;
views/photos/new.html.erb и измените определение формы на следующее (это просто стенографическая запись Rails для HTML-кода):&lt;br /&gt;
 &amp;lt;% form_for(@photo, :html =&amp;gt; { :multipart =&amp;gt; true }) do |f| %&amp;gt;&lt;br /&gt;
Некоторые из полей, созданных генератором, не подходят для&lt;br /&gt;
наших форм. Уберите все поля после Description в обоих шаблонах –&lt;br /&gt;
просто удалите целый блок для каждого поля, включая тэг параграфа.&lt;br /&gt;
Наконец, добавьте поле загрузки файла:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Photo&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;%= f.file_field :uploaded_data %&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь нужно изменить индексную страницу, содержащую список&lt;br /&gt;
фотографий – так, чтобы на ней показывались миниатюры. Замените&lt;br /&gt;
весь файл строкой:&lt;br /&gt;
 render :partial =&amp;gt; ‘photo’, :collection =&amp;gt; @photos %&amp;gt;&lt;br /&gt;
Эта строка выводит ‘partial’ (так называются повторно используемые&lt;br /&gt;
шаблоны) для каждой фотографии в массиве @photos. Контроллер&lt;br /&gt;
PhotosController загружает @photos в действии для индексной страницы. Добавить partial для фотографий просто: создайте файл app/views/photos/_photo.html.erb и добавьте в него строки:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;div class=”photo”&amp;gt;&lt;br /&gt;
&amp;lt;h2&amp;gt;&lt;br /&gt;
&amp;lt;%= h photo.title %&amp;gt; &amp;lt;%= link_to ‘Edit’, edit_photo_path(photo) %&amp;gt;&lt;br /&gt;
&amp;lt;%= link_to ‘Delete’, photo, :confirm =&amp;gt; ‘Are you sure?’, :method =&amp;gt;&lt;br /&gt;
:delete %&amp;gt;&lt;br /&gt;
&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;%= link_to image_tag(photo.public_filename(:thumb)), photo %&amp;gt;&lt;br /&gt;
&amp;lt;%= textilize h(truncate(photo.description)) %&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
Некоторые из вызовов этих методов – помощники, предоставляемые Rails и библиотеками, которые он использует. Например, h()&lt;br /&gt;
гарантирует, что текст безопасен и не содержит HTML-кода – это хороший способ «провести санобработку» отправляемого пользователем&lt;br /&gt;
контента. Метод textilize выводит текст в соответствии с требованиями&lt;br /&gt;
Textile.&lt;br /&gt;
&lt;br /&gt;
Также можно отредактировать файл app/views/photos/show.html.&lt;br /&gt;
erb, удалив ненужные поля. Я убрал заголовок (‘title’), переместил&lt;br /&gt;
ссылки «редактировать/назад» в верхнюю часть файла и добавил тэг&lt;br /&gt;
image для фотографии:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;h2&amp;gt;&amp;lt;%=h @photo.title %&amp;gt;&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;%= link_to ‘Edit’, edit_photo_path(@photo) %&amp;gt; |&lt;br /&gt;
&amp;lt;%= link_to ‘Back’, photos_path %&amp;gt;&lt;br /&gt;
&amp;lt;div class=”large_photo”&amp;gt;&amp;lt;%= image_tag @photo.public_filename %&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь измените основной шаблон (app/views/layouts/application.&lt;br /&gt;
html.erb), исправив строку stylesheet_link_tag на…&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;%= stylesheet_link_tag :all %&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
…и добавив некую общую навигацию над выражением yield:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&amp;lt;div id=”navigation”&amp;gt;&lt;br /&gt;
&amp;lt;% if current_user %&amp;gt;&lt;br /&gt;
&amp;lt;%= link_to ‘Logout’, session_url, :method =&amp;gt; ‘delete’ %&amp;gt; |&lt;br /&gt;
&amp;lt;% else %&amp;gt;&lt;br /&gt;
&amp;lt;%= link_to ‘Login’, new_session_url %&amp;gt; | &amp;lt;%= link_to ‘Register’, new_user_url %&amp;gt; |&lt;br /&gt;
&amp;lt;% end %&amp;gt;&lt;br /&gt;
&amp;lt;%= link_to ‘All Photos’, photos_url %&amp;gt; | &amp;lt;%= link_to ‘New Photo’, new_photo_path %&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
Вы будете часто использовать link_to. Он создает ссылки на основе файла config/routes.rb, гарантируя, что URL-адреса будут выглядеть&lt;br /&gt;
именно так, как вы хотите, и позволяя вам забыть о том, как они пишутся. Если вы видите метод, который заканчивается на _url или _path,&lt;br /&gt;
знайте, что это ссылка на путь. Например, photos_url и photos_path&lt;br /&gt;
оба вернут /photos.&lt;br /&gt;
&lt;br /&gt;
Контроллер ApplicationController определяется в файле app/controllers/application.rb и наследует от ActionController::Base. Это действие, которое по умолчанию визуализирует шаблон app/views/photos/index.erb.html. PhotosController доступен по адресу http://localhost:3000/&lt;br /&gt;
photos. Чтобы миниатюры не выводились на индексной странице, контроллер нужно изменить. Отредактируйте файл app/controllers/photos_controller.rb так, чтобы вывод индекса игнорировал миниатюры, где-то&lt;br /&gt;
в строке 5:&lt;br /&gt;
 @photos = Photo.find(:all, :conditions =&amp;gt; ‘thumbnail is NULL’)&lt;br /&gt;
Перед отправкой фотографий также нужно убедиться в том,&lt;br /&gt;
что пользователь зашел в систему. Удалите следующие строки из&lt;br /&gt;
UsersController и добавьте их в app/controllers/application.rb:&lt;br /&gt;
&amp;lt;source lang=ini&amp;gt;# Be sure to include AuthenticationSystem in Application&lt;br /&gt;
# Controller instead&lt;br /&gt;
include AuthenticatedSystem&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь нужно удостовериться, что при создании пользователя&lt;br /&gt;
устанавливается его ID. Замените первую строку действия create в&lt;br /&gt;
PhotosController:&lt;br /&gt;
 @photo = current_user.photos.new params[:photo]&lt;br /&gt;
и измените первую строку действия update:&lt;br /&gt;
 @photo = current_user.photos.find params[:id]&lt;br /&gt;
Как видите, здесь, для гарантии того, что пользователь может&lt;br /&gt;
редактировать только свои фотографии, используется связь Photos с&lt;br /&gt;
моделью User. Нужно сделать еще кое-что: убедиться, что только пользователи, зашедшие в систему, могут создавать и редактировать фотографии. Это можно сделать с помощью модуля Restful Authentication.&lt;br /&gt;
Добавьте такую строку над выводом индекса в PhotosController:&lt;br /&gt;
 before_filter :login_required, :only =&amp;gt; [ :edit, :update, :new, :create ]&lt;br /&gt;
&lt;br /&gt;
==== Стили фотографий ====&lt;br /&gt;
Таблицы стилей хранятся в каталоге public/stylesheets. Добавьте туда&lt;br /&gt;
файл screen.css:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;css&amp;quot;&amp;gt;#navigation { background-color: #000; padding: 4px; margin: 0; color:&lt;br /&gt;
#aaa; }&lt;br /&gt;
#navigation a { color: #fff; text-decoration: none; }&lt;br /&gt;
#navigation a:hover { background-color: #fff; color: #000; }&lt;br /&gt;
.photo { width: 30%; float: left; background-color: #f0f0f0; margin:&lt;br /&gt;
10px 10px 0 0; padding: 10px; height: 220px; }&lt;br /&gt;
.photo h2 { margin: 0 0 14px 0; padding: 0; font-size: 1.5em; }&lt;br /&gt;
.large_photo { margin: 10px 0; }&amp;lt;/source&amp;gt;&lt;br /&gt;
Остановите script/server на своем терминале, нажав Ctrl+C. Теперь&lt;br /&gt;
снова запустите его, и attachment-fu будет готов к использованию в&lt;br /&gt;
вашей фотогалерее.&lt;br /&gt;
&lt;br /&gt;
После добавления модулей в проект нужно перегрузить процесс&lt;br /&gt;
web-сервера; то же относится к изменению файлов конфигурации&lt;br /&gt;
Rails, включая config/environment.rb. К счастью, остальной код и config/routes.rb редактируются динамически.&lt;br /&gt;
&lt;br /&gt;
Теперь можно кликнуть по ссылке Register для создания пользователя и зайти в систему. Помните, что при этом используется имя, а не&lt;br /&gt;
адрес электронной почты. Кликните по ссылке New Photo для загрузки&lt;br /&gt;
фотографии в коллекцию. Теперь используйте сэкономленное время:&lt;br /&gt;
загрузите свои отпускные снимки!&lt;/div&gt;</description>
			<pubDate>Sun, 23 Aug 2009 09:47:47 GMT</pubDate>			<dc:creator>Yaleks</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF108:Rails</comments>		</item>
	</channel>
</rss>