Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 钢轨、钢轨编辑器;尝试根据编辑字符串的内容呈现部分内容_Ruby On Rails_Ckeditor - Fatal编程技术网

Ruby on rails 钢轨、钢轨编辑器;尝试根据编辑字符串的内容呈现部分内容

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

我刚刚在rails应用程序中加入了ckeditor;效果很好。我有一个PageComponent模型,它有一个文本字段,用于存储随后呈现到show view中的内容,如下所示:

<%= 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标记,以便在输入后可以编辑。