Я показываю повторяющиеся блоки контента в erb (шаблон электронной почты), и я думал, что сделаю простой класс, который будет представлять каждый блок.Создание простого класса внутри шаблона erb
Я пробовал что-то вроде этого, которое работает, если я вручную визуализую erb, но если я попытаюсь отправить электронное письмо, я бросаю.
<%
class EmailBox
attr_accessor :text, :textLink,
end
x = EmailBox.new
x.textLink = 'https://www.google.com/'
x.text = 'blah'
@boxes = []
@boxes.push x
%>
<% @boxes.each do |row| %>
<a style="text-decoration:none;color:#666;" href="<%=row.textLink%>"><%=row.text%></a>
<% end %>
Ошибка я получаю:
/Users/x/appname/app/views/clip_mailer/send_clip_with_destination.html.erb:205: class definition in method body
/usr/local/rvm/gems/ruby-1.9.3-p392/gems/actionpack-3.2.13/lib/action_view/template.rb:297:in `module_eval'
/usr/local/rvm/gems/ruby-1.9.3-p392/gems/actionpack-3.2.13/lib/action_view/template.rb:297:in `compile'
/usr/local/rvm/gems/ruby-1.9.3-p392/gems/actionpack-3.2.13/lib/action_view/template.rb:244:in `block in compile!'
<internal:prelude>:10:in `synchronize'
/usr/local/rvm/gems/ruby-1.9.3-p392/gems/actionpack-3.2.13/lib/action_view/template.rb:232:in `compile!'
Я повторяюсь, но это прекрасно работает, когда я вручную вынести шаблон, открыв его на диске и работает ERB.new(file).result(binding)
Почему вы не кладете декларацию класса в модель и все наполняющие вещества в контроллер? –
Я просто использую этот простой класс один раз, чтобы создать тело письма. это не относится ни к чему другому. Я также не перебираю записи базы данных или что-то еще, я вручную создаю эти повторяющиеся блоки. – portforwardpodcast
Размещение класса в моделях не означает, что вы используете базу данных, это может быть просто класс (модель). Это и логика в контроллере - это соглашение, и это важно. :) –