2012-01-07 4 views
0
.row 
    .nine.columns.centered 
     %ul.bucketlist 

      - @buckets.each_with_index do |resource, index| 
       %a{:href => "#{bucket_path(resource)}"} 
        %li.bucket 
         %h4= index + 1 
         %h5= resouce.name 

      %a{:href => "#{new_bucket_path}"} 
       %li.bucket.empty 
        = image_tag "add.gif" 
        %h5 Add Bucket 

У меня есть вышеуказанный код, написанный на 3 разных мнениях, с незначительными отличиями между ними. Мне это не кажется очень сухим, поэтому я ищу какую-то помощь для его очистки.Нужна помощь DRYing things up - Rails 3.1

Между видом только несколько вещей, которые варьируются:

  1. @buckets.each - The @buckets коллекция должна измениться между @notes, @units Aswell.
  2. #{bucket_path} - Я хотел бы иметь возможность передавать переменную, так что bucket_path становится resource_path.

Если кто-нибудь может предложить любую помощь, это было бы очень признательно.

ответ

2

Мой опыт работы с Haml ограничен, но я думаю, вы должны быть в состоянии поставить общий код в частичном (файл с именем _common.html.haml, например), а затем с точки зрения просто сделать:

= render 'common', :items => @buckets, :new_item_path => new_bucket_path 

Затем измените частичное так:

%ul.bucketlist 
    - items.each_with_index do |resource, index| 
     %a{:href => url_for(resource)} 
      %li.bucket 
       %h4= index + 1 
       %h5= resouce.name 

    %a{:href => "#{new_item_path}"} 
     %li.bucket.empty 
      = image_tag "add.gif" 
      %h5 Add Item 
+0

Выглядит хорошо, но проблема связана с прохождением пути в Частичный. Мне нужно вывести путь как bucket_path (bucket), так как я могу отправить это частичным? – Ammar

+0

Maye вы можете оставить аргумент пути alltogether, используя вместо этого url_for helper? 'url_for (resource)' должен предоставить вам правильный URL-адрес для каждого элемента. – harald

+0

Отличная идея: D Это все работает сейчас, за исключением того, что я не знаю, как передать new_resource_path в частичный (new_resource_path) за пределами блока .each? – Ammar

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

  • Еще один способ - проверить контроллер, в котором вы находитесь, и сформировать требуемый код на основе этого. Например

    ресурсов = @buckets если PARAMS [контроллер] == «ведро»

    Более сгущенное способ удалить, если заявления будет что-то вроде следующих, но я havnt попробовал его.

    Exec "ресурс = @ # {PARAMS [: контроллер]} s"

Позвольте мне знать, если вам нужна дополнительная помощь.

+0

Мне нравится идея вспомогательной функции, но я не совсем уверен, как это сделать. Помимо того, что вложенный контент-текст внутри content_tags, как я мог бы воссоздать якорь и его детей? – Ammar

Смежные вопросы