ruby-on-rails – 在文本属性中插入Rails对象的交叉超链接的解决
我正在使用Rails中的Web应用程序,其行为与CMS非常相似:有些文章,其文本属性包含指向其他文章(或其他对象类)的链接.我目前正在将该属性存储为
HTML.
有没有什么好方法可以以相对容易更改的方式对这些链接进行建模,并包含对象id的引用,而不是绝对URL? 我想的其中一个解决方案是使用某种特殊标记,例如: [link_to "Text for the link",Article:12] 其中12是它链接到的文章的ID.在呈现文本时将解析此标记. 这样做的缺点是我必须入侵TinyMCE(我正在考虑使用编辑HTML的编辑器),以便它可以通过访问数据库并自动分配对象类型和ID来插入到其他对象的链接(编辑文本的人不知道id.). 这有什么简单的解决方案吗? 或者我应该坚持使用绝对网址(除了维护问题,在开发过程中很烦人,因为它们总是指向生产,这对我来说很困惑)? 另外,是否有人在其他语言(php,Wordpress,其他CMS等)中有类似的例子以一种很好的方式解决这个问题?我想,这在CMS中非常重要,如果一个好的系统可以处理所有这些链接,可以减少大量的工时. 编辑: 我正在考虑的另一个可能的解决方案是让人直接在代码中复制文章的链接,但是在提交时它应该生成正确的关联id并使其成为如果url结构改变,链接是总是最新的.如果你已经尝试过,我想听听你对这种方法的看法和经验. 这种方法的挑战是解析与Rails的链接,并发现它指向一篇文章,该文章的ID为##.然后我必须插入一个短代码,它将在解析和渲染时始终转换为该文章的实际链接. 我发现了一种方法可以使这个可行: Rails.application.routes.recognize_path 但可能有一些警告我现在还没看到…… 编辑没有. 2 我还想指定我选择CKEditor作为内容编辑器,但如果有更清晰的优点,我会考虑其他的. 解决方法
我使用短代码系统构建了类似的东西,这允许我在模型上调用特定方法并替换文本中的短代码:
帮手 def parse_shortcode(model) text = model.text text.gsub(/([#!s?w+])/i) do |match| result = model.try(match) result.nil? '' : link_to(result[:text],result[:url]) end end 模型 def contact_link { :text => self.name,:url => self.url } end 视图 <%= parse_shortcode(@article) %> 我没有测试上面的代码,它显然有点简化,但它解释了我背后的思考过程. 编辑:只是为了澄清我上面的例子使用[#!的发明短代码语法.方法] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |