Нужна помощь СУШКА - Rails 3.1 - PullRequest
0 голосов
/ 08 января 2012
.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 разных видах, с небольшими отличиями между ними.Мне это не кажется СУХИМЫМ, поэтому я ищу некоторую помощь, чтобы убрать это.

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

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

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

Ответы [ 2 ]

2 голосов
/ 08 января 2012

Мой опыт работы с 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 голосов
/ 08 января 2012
  • Одним из решений может быть написание вспомогательной функции для генерации HTML. Люди обычно не любят HTML в помощниках, но в этом случае это было бы хорошей идеей. Напишите функцию, где вы проходите в ресурс имя, и он генерирует этот код для вас

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

    resource = @buckets if params [controller] == 'bucket'

    Более сжатый способ удалить, если заявления будут чем-то вроде следующего, но я не попробовал это.

    exec "resource = @ # {params [: controller]} s"

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

...