Ruby on rails 钢轨、钢轨编辑器;尝试根据编辑字符串的内容呈现部分内容
我刚刚在rails应用程序中加入了ckeditor;效果很好。我有一个PageComponent模型,它有一个文本字段,用于存储随后呈现到show view中的内容,如下所示:Ruby on rails 钢轨、钢轨编辑器;尝试根据编辑字符串的内容呈现部分内容,ruby-on-rails,ckeditor,Ruby On Rails,Ckeditor,我刚刚在rails应用程序中加入了ckeditor;效果很好。我有一个PageComponent模型,它有一个文本字段,用于存储随后呈现到show view中的内容,如下所示: <%= raw @page_component.page_content %> <%= render :partial=>'some_partial' %> 我只是想在page_content属性文本中包含一个erb语句,如下所示: <%= raw @page_componen
<%= raw @page_component.page_content %>
<%= render :partial=>'some_partial' %>
我只是想在page_content属性文本中包含一个erb语句,如下所示:
<%= raw @page_component.page_content %>
<%= render :partial=>'some_partial' %>
“部分”%>
但它似乎不起作用。文本已正确保存到字段中,但页面上没有显示任何内容。这只是一个基本的想法测试,我不确定这是否可能,因为rails可能已经完成了整个响应渲染过程。这样做是否可能,如果可能,如何做?正如您所说,
标记是ERB标记,因此解决问题的一种方法就是简单地使用(并且已经包含在您的视图和帮助器中)翻译并执行page\u content
字符串中任何标记的内容,并返回结果字符串。传递给result方法的binding()
参数包含当前(Rails)上下文,允许像普通Rails视图一样解释字符串
您可以在PageComponent助手中放置以下方法:
def translate_erb(string)
ERB.new(string, 0).result(binding()) # 0 is a 'safety level' (see docs)
end
然后在您的视图中,像这样调用该方法:
<%= raw translate_erb(@page_component.page_content) %>
虽然这会起作用,但我强烈建议不要这样做。通过实现这一点,您为用户提供了前所未有的灵活性,因此,这是一场完全的安全灾难。理想情况下,您应该创建自己的标记或使用其他方法来添加此功能,这样您就不会给用户完全的自由去做他们想做的任何事情。然而,只要你明白这一点,这是一个可行的方法。请小心使用它 正如您所说,
标记是ERB标记,因此解决问题的一种方法是简单地使用(并且已经包含在您的视图和帮助程序中)翻译和执行页面内容
字符串中任何标记的内容,并将结果字符串返回给您。传递给result方法的binding()
参数包含当前(Rails)上下文,允许像普通Rails视图一样解释字符串
您可以在PageComponent助手中放置以下方法:
def translate_erb(string)
ERB.new(string, 0).result(binding()) # 0 is a 'safety level' (see docs)
end
然后在您的视图中,像这样调用该方法:
<%= raw translate_erb(@page_component.page_content) %>
虽然这会起作用,但我强烈建议不要这样做。通过实现这一点,您为用户提供了前所未有的灵活性,因此,这是一场完全的安全灾难。理想情况下,您应该创建自己的标记或使用其他方法来添加此功能,这样您就不会给用户完全的自由去做他们想做的任何事情。然而,只要你明白这一点,这是一个可行的方法。请小心使用它 谢谢你的回复,詹姆斯。此功能并不是向所有用户公开的,只是管理员控制内容的一部分。我尝试实现您的解决方案,但在运行该解决方案时出现“main:Object的未定义方法'render'错误”。下面是我传递给我的translate\u erb方法的模型字符串:“欢迎来到这里……测试'共享/文章列表'%>”。在查看了erb的api后,我尝试了修改安全级别等,但仍然失败。在传递给erb.new的字符串中,您无法调用render?erb解释似乎发生在不同的上下文中,因此,它不了解您使用它的Rails环境。我查看了API,发现result方法可以向其传递一个绑定,该绑定设置ERB字符串的上下文-参数只是
binding()
(内核的方法)。我测试了它,它为我工作-希望能为你解决它!我将用这个发现编辑我的答案;它正在工作。让ckeditor不要从输入中去掉rails标签,这样它们在输入后就可以编辑了。谢谢你的回复,James。此功能并不是向所有用户公开的,只是管理员控制内容的一部分。我尝试实现您的解决方案,但在运行该解决方案时出现“main:Object的未定义方法'render'错误”。下面是我传递给我的translate\u erb方法的模型字符串:“欢迎来到这里……测试'共享/文章列表'%>”。在查看了erb的api后,我尝试了修改安全级别等,但仍然失败。在传递给erb.new的字符串中,您无法调用render?erb解释似乎发生在不同的上下文中,因此,它不了解您使用它的Rails环境。我查看了API,发现result方法可以向其传递一个绑定,该绑定设置ERB字符串的上下文-参数只是binding()
(内核的方法)。我测试了它,它为我工作-希望能为你解决它!我将用这个发现编辑我的答案;它正在工作。让ckeditor不从输入中删除rails标记,以便在输入后可以编辑。