我的content
表格中有Posts
列。我在Post模型中插入Posts
表中的一些信息
Post.create({content: "<%= link_to('post', post_path) %> blah blah ... "})
当我想租借@post.content
时,我收到"<%= link_to('post', post_path) %> blah blah ..."
而没有执行字符串。
如何渲染它?
答案 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 - 如果方法的参数随时间变化且方法输出也会随时间变化,那么您不需要在数据库中缓存任何内容