Подтвердить что ты не робот

Как сделать частичный вид синатры (haml in haml)?

У меня есть простое приложение sinatra, которое использует haml и sass для представлений. Один из видов (расположенный в папке views) является частью моего меню навигации. Я пытаюсь отобразить его из index.haml, но я получаю следующую ошибку: неправильное количество аргументов (1 для 2)

Я пытаюсь сделать это со следующими строками в index.haml

.navigation
  = render :partial => "nav"
4b9b3361

Ответ 1

РЕДАКТИРОВАТЬ:!!! OUTDATED!!! Прочитайте ответ Джейсона ниже!

Чем вы пытаетесь работать в rails! Sinatra не имеет метода partial. Реализация partial на Sinatra выглядит как this (source gist) из github:

module Haml
  module Helpers
    def partial(template, *args)
      template_array = template.to_s.split('/')
      template = template_array[0..-2].join('/') + "/_#{template_array[-1]}"
      options = args.last.is_a?(Hash) ? args.pop : {}
      options.merge!(:layout => false)
      if collection = options.delete(:collection) then
        collection.inject([]) do |buffer, member|
          buffer << haml(:"#{template}", options.merge(:layout =>
          false, :locals => {template_array[-1].to_sym => member}))
        end.join("\n")
      else
        haml(:"#{template}", options)
      end
    end
  end
end

Включая этот метод, вы можете вызвать partial в своих .haml файлах, например, = partial("partial_name")

Если вы хотите render, вид в другом синтаксисе представления - это = render(:haml,:'rel_path_to_view',:locals => {:optional => option})

Обратите внимание на различия в синтаксисе между rails и Sinatra относительно метода render!

Ответ 2

Вы можете просто использовать функцию samatra haml:

= haml :nav

Ответ 3

Или вы могли бы просто сделать это:

helpers do
  def partial(page, options={})
    haml page.to_sym, options.merge!(:layout => false)
  end
end

И включите ваши частичные с помощью:

= partial( "something-rad" )

Ответ 4

Вот как я это делаю (проще, чем @kfl62 ответ, более функциональный, чем @jm3 ответ):

module Partials
  def partial( page, variables={} )
    haml page.to_sym, {layout:false}, variables
  end
end
helpers Partials

Используйте его в своем файле Haml, например:

%ul#comments
  - @comments.each do |comment|
    %li= partial :comment, comment:comment