2013-12-11 2 views
0

У меня есть редактируемые страницы, которые хранятся в виде текста в моей базе данных. Эти страницы будут называться на мой взгляд, как ...Позволяет редактировать страницы, содержащие переменные

#app/views/static_pages/scheduling_text.html.erb 
<%= Page.find_by_name("New Registration").content %> 

Page.content имеет тип «текст» (не строка). Часть текста, который содержит переменные будут выглядеть ...

Вы успешно зарегистрировались New Student Ориентация на # {<% = @ registration.orientation.class_date%>} в ...

Если Конечно, когда я вызываю этот контент в представлении, я просто получаю текст, а не значения модели. Как я могу сделать эти страницы доступными к значениям модели? Я также попытался добавить # {} вокруг текста без успеха.

ответ

0

OK, после того, как много плач и скрежет зубов вот решение Я кулак с. Сначала я использую mustache. Это намного безопаснее, чем сохранение erb в шаблонах и предотвращает вредоносную инъекцию sql в ваше приложение. Я просто добавил «усы» в свой gemfile, а не в усы-рельсы, поскольку он кажется более современным. Затем я создал простую модель страницы с двумя атрибутами:: name и: content. Я использую модель страницы для хранения исходного кода усы.

Вот соответствующие файлы ...

В моем контроллере я зову ...

#app/controllers/registrations_controller.rb 
def create 
    @registration = Registration.new(params[:registration]) 

    respond_to do |format| 
     if @registration.save 
     if @registration.orientation != nil 
      format.html { render "scheduling_text.html.erb" } 

Тогда мой взгляд выглядит ...

#app/views/registrations/scheduling_text.html.erb 
<%= Mustache.render(Page.find_by_name("New Registration").content, {:registration => @registration }).html_safe %> 
<%= link_to 'Back', orientations_path %> 
      ... 

Тогда в моей странице модель У меня есть что-то вроде ...

Вы успешно зарегистрированы для New Stud ent Orientation на {{registration.orientation.class_date}} в {{registration.orientation.class_time}}. Приходите за 10 минут до запланированной ориентации. Помните, что вы должны присутствовать на этой сессии Ориентации, прежде чем сможете зарегистрироваться для занятий.

...

Использование модели страницы с помощью таких лесов хорошо работает, потому что оно дает вам новые, обновляемые и создаваемые действия, которые позволят пользователям редактировать контент. Обратите внимание: они могут легко испортить ваши рубиновые переменные, так что это недостаток. Просто сообщите своим пользователям, чтобы они не писали что-либо между {{}}.

Надеюсь, что это поможет кому-то еще.

0

Это, кажется, дубликат Rails: storing erb templates in database

Учитывая, что этот должен сделать трюк для вас, или, по крайней мере, достаточно близко, чтобы вы начали:

<%= sanitize ERB.new(Page.find_by_name("New Registration").content).run %> 

Кроме того, может удалить sanitize, если контент не предоставлен пользователем (это прежде всего проблема безопасности).

Я сделал что-то так же, как это с помощью обработки Haml:

= sanitize Haml::Engine.new(article.content).render 

Для справки, вот соответствующая ERB документация: http://ruby-doc.org/stdlib-2.0.0/libdoc/erb/rdoc/ERB.html

+0

hmm ... Я получаю ошибку undefined method 'empty? ' для # Lumbee

+0

Я обновил ответ, чтобы отразить вызов .run (вы также можете попробовать .result вместо .run). Это должно обработать код ERB и вернуть результат, который, как я думаю, вам нужен. – Donovan

+0

ОК, это лучше, но теперь я получаю неопределенный метод «ориентация» для nil: NilClass. Таким образом, похоже, что это не обман с регистрацией. Однако, простой код в моем файле erb работает ??? – Lumbee

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