Частицы Rails с наследованием одной таблицы - PullRequest
9 голосов
/ 03 мая 2011

Я хочу использовать партиалы в рельсах вместе с наследованием одной таблицы. В настоящее время у меня есть эта работа:

render partial: @vehicle

# which renders the relevant view, depending on object type, eg:
#   views/trucks/_truck.haml
#   views/car/_car.haml

Я хочу оставить эти виды по умолчанию на месте и создать дополнительный компактный вид для каждого объекта, возможно, вот так

# example code only, I want to write something like:
render partial: 'compact', locals: {vehicle: @vehicle}

# and then have this render (for example) with
#   views/trucks/_compact.haml
#   views/car/_compact.haml

Я могу с радостью переименовать вещи или изменить имена файлов или местоположения, но как проще всего поддерживать два вида представлений (компактное и стандартное)?

Позже будет еще много классов, так что ищите очень чистый, элегантный код.

(рельсы 3.0.5+ на ruby ​​1.9.2)

Ответы [ 3 ]

13 голосов
/ 06 мая 2011

Чтобы получить именно то, что вы просили, вам нужно сделать следующее:

render partial: "#{@vehicle.type.tableize}/#{@vehicle.type.underscore}", object: @vehicle

и вы получите:

views/trucks/_truck.html.haml

и объект будет доступен как:

@truck
3 голосов
/ 03 мая 2011

Возможно, есть лучший способ, но всегда есть такой подход:

render partial: "#{@vehicle.class.to_s.tableize}/compact", locals:{vehicle: @vehicle}

(или может потребоваться быть _компактным, а не просто компактным, но вы поняли идею)

1 голос
/ 06 мая 2011

Я сделал что-то похожее, но вместо того, чтобы иметь партиалы в двух отдельных файлах, я объединил их и использовал аргумент locals для передачи флага:

# The hash syntax for render is redundant, you can simply pass your instance
# Render the long-form of your partial
render @vehicle

# When using render _instance_, the second argument becomes the locals declaration
# Render the compact form
render @vehicle, compact: true

И затемв моем частичном ...

<% if defined? compact %>
  <!-- HTML for compact view -->
<% else %>
  <!-- HTML for extended view -->
<% end %>

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

Недостатокв том, что это небольшое отклонение от «традиционного» использования партиалов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...