Несколько разметок в направляющих [Новичок Q]

Как 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 расположения для отображения релевантной информации для той конкретной категории.

----Вопросы----

  1. Это правильный способ приблизиться к этому типу проблемы.
  2. Будет этот подход быть совместимым, когда я решу добавить драгоценный камень как thinking_sphinx для запущения поиска.
  3. Что делают проблемы Вы видите с моим подходом и как может я делать его лучше.
  4. Я читал что-то о "Полиморфном Помощнике", который подает заявку в этом случае, начиная с категории существуют для всех объектов?

Кроме того, я пытался заставить маршруты представлять URL как "http://localhost/living-room-tv"

1
задан BriteLite 15 June 2010 в 03:47
поделиться

2 ответа

Если я правильно вас понял, вам нужны не разные раскладки. Вам нужны разные шаблоны.

Макет означает общую структуру всей страницы, и обычно она является общей для всего проекта, или, возможно, у вас будет 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} .

Это поможет вам сохранить логику просмотра как можно более сухой, а также предоставит вам гибкость для создания настраиваемых шаблонов для каждой категории.

1
ответ дан 2 September 2019 в 23:46
поделиться
  1. Вероятно, это правильный способ, если у вас есть 2-3 категории. Если ваша система будет расти, вы наверняка захотите сделать реализацию более гибкой.

  2. Не знаю, каких проблем вы ожидаете при поиске. Лучше всего, чтобы на странице результатов поиска у вас были элементы разных типов, поэтому вам просто понадобятся разные части для их отображения.

  3. Как я уже сказал, добавление поддержки различных категорий может быть утомительным при вашем текущем подходе. Я могу предложить две вещи (не обязательно взаимоисключающие):

    • использовать соглашение для связывания имени категории с макетом (например, категория «электроника» отображается с помощью макета electronics ). Таким образом вы сможете просто render: layout => @ item.category , и этот код добавляет доказательство новых категорий
    • по мере того, как ваша система будет расти и улучшаться, вы можете обнаружить необходимо ввести совершенно новую модель для ваших категорий. Подумайте об этом сейчас, может быть, вы захотите сделать это прямо сейчас.
  4. Полиморфные ассоциации - другое дело. Для них должно быть две модели, сейчас у вас только одна. См. Rails Guides, 2.9 .

Кстати, я не уверен, почему вам нужно, чтобы весь макет различался для категорий. Если общий вид вашего сайта согласован, то, вероятно, будет более подходящим просто иметь разные части для элементов разных категорий.

Что касается URL-адресов, этот вопрос поднимался много раз ( здесь и там ).

1
ответ дан 2 September 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: