Как newb, я решил создать "домашние материально-технические ресурсы" приложение. Я теперь застреваю о том, как программно выбрать расположение на основе того, какой объект это при просмотре его в браузере.
Согласно моему планированию, до сих пор я должен был создать несколько моделей для представления типов объектов, которые я могу найти в своем доме: Furniture, Electronics и Книги.
class Book < ActiveRecord::Base
end
class Furniture < ActiveRecord::Base
end
class Electronic < ActiveRecord::Base
end
Теперь модель Books имеет вещи как ISBN, страницы, адрес и категория. Модель Furniture имеет вещи как цвет, цена, адрес и категория. Электроника имеет вещи как имя, напряжение, адрес и категория.
Вот то, где я запутался. Я знаю, что адрес свойства будет тем же для всех них. Я также знаю, что, должен буду создать несколько "разметок" для 3 различных типов объектов для проявления различных свойств упомянутых объектов с соответствующей графикой и таблицами стилей.
Но как я пойду о решении, какая категория объект так, я могу определить который расположение представить.
Согласно мне, это - то, как я сделаю это:
class DisplayController < ApplicationController
def display
@item = Params[:item]
if @item.category = "electronics"
render :layout => 'electronics'
end
end
В моем routes.rb
map.display ':item', :controller => 'display', :action => 'display'
У меня только, кажется, есть одно беспокойство с этим, я, вероятно, буду добавлять много категорий позже и думать, что должно быть больше DRY-esque способ иметь дело, а не жесткое кодирование их.
Я понимаю, что должен добавить в свои теги HTML расположения для отображения релевантной информации для той конкретной категории.
----Вопросы----
Кроме того, я пытался заставить маршруты представлять URL как "http://localhost/living-room-tv"
Если я правильно вас понял, вам нужны не разные раскладки. Вам нужны разные шаблоны.
Макет означает общую структуру всей страницы, и обычно она является общей для всего проекта, или, возможно, у вас будет 2-3 макета для каждого проекта. (макет всего сайта, макет администратора и некоторые другие конкретные макеты).
Вы упомянули, что хотите, чтобы другой шаблон отображал различные атрибуты книг, мебели и электроники.
Создайте файл представления app / views / display / furniture.html.erb и еще один для книг и электроники и отрендерите его, используя render: template => 'Furniture'
вместо render: макет
.
Теперь, если есть общие части информации среди разных категорий, что вам нужно сделать, так это создать частичную часть, содержащую только общую часть. Например, создайте частичное приложение / views / shared / address.html.erb, а внутри вашего Furniture.html.erb вы должны сделать render: partial => '/ shared / address',: locals => {: адрес => @ item.address}
.
Это поможет вам сохранить логику просмотра как можно более сухой, а также предоставит вам гибкость для создания настраиваемых шаблонов для каждой категории.
Вероятно, это правильный способ, если у вас есть 2-3 категории. Если ваша система будет расти, вы наверняка захотите сделать реализацию более гибкой.
Не знаю, каких проблем вы ожидаете при поиске. Лучше всего, чтобы на странице результатов поиска у вас были элементы разных типов, поэтому вам просто понадобятся разные части для их отображения.
Как я уже сказал, добавление поддержки различных категорий может быть утомительным при вашем текущем подходе. Я могу предложить две вещи (не обязательно взаимоисключающие):
electronics
). Таким образом вы сможете просто render: layout => @ item.category
, и этот код добавляет доказательство новых категорий Полиморфные ассоциации - другое дело. Для них должно быть две модели, сейчас у вас только одна. См. Rails Guides, 2.9 .
Кстати, я не уверен, почему вам нужно, чтобы весь макет различался для категорий. Если общий вид вашего сайта согласован, то, вероятно, будет более подходящим просто иметь разные части для элементов разных категорий.
Что касается URL-адресов, этот вопрос поднимался много раз ( здесь и там ).