如何从字符串Rails执行代码并呈现它?

时间:2014-07-22 23:30:39

标签: ruby-on-rails

我的content表格中有Posts列。我在Post模型中插入Posts表中的一些信息

Post.create({content: "<%= link_to('post', post_path) %> blah blah ... "})

当我想租借@post.content时,我收到"<%= link_to('post', post_path) %> blah blah ..."而没有执行字符串。

如何渲染它?

1 个答案:

答案 0 :(得分:1)

所以,正如所说的那样,将代码存储在数据库中是一个非常错误的想法。这个例外很少,实现起来非常复杂,容易出错,并且存在安全问题。简而言之:不要这样做。

所以你需要另一种设计。基本上有3种情况,提取与您的应用程序目标相对应的情况:

A - 如果您的方法参数和输出将来永远不会改变,那么您可以在保存之前执行代码并将输出存储在模型的缓存列(类型字符串或文本)中。稍后检索此缓存的输出时,您可以将其用作

post.cached_output = my_method(...)
post.save
# In the future, in your view:
<%= post.cached_output %>

B - 如果您的方法的参数将来永远不会改变,但方法输出根据外部元素而不同,那么只需存储该参数的值并在每次需要时调用该方法输出

post.cached_parameter = 17
post.save
# In the future, in your view:
<%= my_method(params: post.cached_parameter) %>

C - 如果方法的参数随时间变化且方法输出也会随时间变化,那么您不需要在数据库中缓存任何内容