Ruby on rails 允许用户编辑包含变量的页面

Ruby on rails 允许用户编辑包含变量的页面,ruby-on-rails,Ruby On Rails,我有一些可编辑的页面,它们作为文本存储在我的数据库中。这些页面将在我的视图中调用,如 #app/views/static_pages/scheduling_text.html.erb <%= Page.find_by_name("New Registration").content %> Page.content的类型为“text”,而不是字符串。包含变量的文本部分看起来像 您已在{}上成功注册新学员入职培训,网址为 当然,当我在视图中调用此内容时,我只获取文本,而不是模型值。如何

我有一些可编辑的页面,它们作为文本存储在我的数据库中。这些页面将在我的视图中调用,如

#app/views/static_pages/scheduling_text.html.erb
<%= Page.find_by_name("New Registration").content %>
Page.content的类型为“text”,而不是字符串。包含变量的文本部分看起来像

您已在{}上成功注册新学员入职培训,网址为


当然,当我在视图中调用此内容时,我只获取文本,而不是模型值。如何使这些页面访问模型值?我还尝试在文本周围添加{},但没有成功。

这似乎是

考虑到这一点,这应该对你有帮助,或者至少离你足够近,让你开始:

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

作为参考,这里有适当的ERB文档:

好的,在经历了很多哀嚎和咬牙切齿之后,这里是我想到的解决方案。首先,我正在使用。这比将erb存储在模板中要安全得多,并防止恶意将sql注入应用程序。我只是简单地在gemfile中添加了“mustache”,而不是MustacheRails,因为它似乎更为最新。然后,我创建了一个具有两个属性的简单页面模型::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 %>
           ...
然后在我的页面模型中,我有一些类似于

您已在{{registration.Orientation.class_date}}上{{registration.Orientation.class_time}成功注册新的学生入职培训。请在预定入职前10分钟到达。请记住,在注册课程之前,您必须参加本培训课程

使用这样的带有脚手架的页面模型非常有效,因为它提供了允许用户编辑内容的新操作、更新操作和创建操作。注意,它们很容易弄乱您的ruby变量,所以这是缺点。只要让你的用户知道不要吃任何介于{{}之间的东西


希望这对其他人有所帮助。

hmm…我得到了错误undefined方法'empty',因为我更新了答案以反映对运行的调用。您也可以尝试.result而不是.run。这应该会处理ERB代码并返回结果,我认为这是您想要的。好吧,这样更好,但现在我得到了nil:NilClass的未定义方法“orientation”。因此,它似乎与注册没有关联。但是,我的erb文件中的普通代码有效???您是否在控制器中定义@registration?如果是这样的话,这听起来像是一个变量范围问题,它没有在对ERB的调用中定义。你可以尝试在页面前面进行评估。按名称查找。\u……是的……现在我想知道其他代码是如何工作的。我没有在静态页面控制器中设置任何变量。
#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 %>
           ...