Rails 4:如何识别和格式化模型属性中的链接、主题标签和提及?

2023-12-21

在我的 Rails 4 应用程序中,我有一个Post模型,与:copy and :short_copy作为自定义属性(字符串)。

这些属性包含社交媒体(Facebook、Twitter、Instagram、Pinterest 等)的副本。

我在我的中显示这些属性的内容Posts#Show view.

目前,URL、#hashtags 和 @mentions 的格式与文本的其余部分相同。

我想做的是以不同的方式格式化它们,例如用另一种颜色或粗体。

我找到了推特文本宝石 https://github.com/twitter/twitter-text/tree/master/rb,它似乎提供了这样的功能,但我的问题是我不需要并且不想让这些 URL、#hashtags 和 @mentions 变成真正的链接。

事实上,twitter-text gem 看起来默认会转换 URL、#hashtags 和 @mentionsTwitter::Autolink,如中所解释的这个堆栈溢出问题 https://stackoverflow.com/questions/12547496/ruby-on-rails-converting-twitter-mentions-hashtags-and-urls-within-a-string.

这不是我想要的:我只想更新我的 URL、#hashtags 和 @mentions 的样式。

我怎样才能在 Ruby/Rails 中做到这一点?

—————

UPDATE:

根据韦斯福斯特的回答,我实现了以下方法post.rb:

def highlight(string)
  string.gsub!(/\S*#(\[[^\]]+\]|\S+)/, '<span class="highlight">\1</span>')
end

然后,我定义了以下 CSS 类:

.highlight {
    color: #337ab7;
}

最后,我实现了<%= highlight(post.copy) %>在所需的视图中。

我现在收到以下错误:

ArgumentError
wrong number of arguments (1 for 2..3)
<td><%= highlight(post.copy) %></td>

我究竟做错了什么?

—————


我确信以下每个正则表达式模式都可以改进以匹配更多选项,但是,以下代码对我有用:

def highlight_url(str)
    str.gsub!(/(https?:\/\/[\S]+)/, '[\1]')
end

def highlight_hashtag(str)
    str.gsub!(/\S*#(\[[^\]]+\]|\S+)/, '[#\1]')
end

def highlight_mention(str)
    str.gsub!(/\B(\@[a-z0-9_-]+)/i, '[\1]')
end

# Initial string
str = "Myself and @doggirl bought a new car: http://carpictures.com #nomoremoney"

# Pass through each
highlight_mention(str)
highlight_hashtag(str)
highlight_url(str)

puts str   # > Myself and [@doggirl] bought a new car: [http://carpictures.com] [#nomoremoney]

在此示例中,我用方括号将匹配项括起来[]。你应该使用span标记并设计它的样式。另外,您可以将这三个都包裹起来gsub!为简单起见,将其合并为单一方法。

更新了询问者的附加错误问题

看起来错误是引用了另一个名为的方法highlight。尝试将方法的名称从突出显示更改为new_highlight看看是否可以解决新问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 4:如何识别和格式化模型属性中的链接、主题标签和提及? 的相关文章

  • 如何使用 PHP 从内容中查找 URL?

    需要一个简单的 preg match 它将在内容中查找 c aspx 不带引号 如果找到 它将返回整个 url 举个例子 content div 4 a href m c aspx mt 01 9310ba801f1255e02e411d8
  • 与 960.gs 的列高度相同吗?

    我有一排 4 列 根据我在每一列中放入的信息量 它们将具有不同的高度 如果你给它们加上背景颜色你就可以看到 我如何给其他列最大高度的列的高度 您可以使用 jQuery 来执行此操作 http www cssnewbie com equal
  • 如何从 pandas 数据框中的列中删除字符串值

    我正在尝试编写一些代码 以逗号分隔数据帧列中的字符串 因此它成为一个列表 并从该列表中删除某个字符串 如果存在 删除不需要的字符串后 我想再次以逗号加入列表元素 我的数据框如下所示 df Column1 Column2 0 a a b c
  • 遵循 http://ruby.railstutorial.org/ 教程时出现 RSpec 错误

    我到处搜索但似乎找不到解决方案 我一直在关注有关的教程http ruby railstutorial org http ruby railstutorial org 我在第 3 章中尝试使用 rspec spec 执行测试 但是我不断收到以
  • 引用 url() 的值真的有必要吗?

    我应该在样式表中使用以下哪一项 Example 1 background image url image png Example 2 background image url image png Example 3 background i
  • Chrome:网络元素自动移动

    我正在开发一个网络项目 在过去的两周里 我正在进行学期考试 所以我要休息一下 现在 既然他们已经结束了 我又继续我的工作了 但我发现我的一些Web 元素 如按钮 span 在 Chrome 上移动了一些像素 在 IE 和 Mozilla 上
  • 使用 jQuery 更改 CSS 类属性

    有没有办法使用 jQuery 更改 CSS 类的属性 而不是元素属性 这是一个实际的例子 我有一个 div 类red red background red 我想转班级red背景属性 而不是具有类的元素red分配的背景 如果我用 jQuery
  • 在Android中将半径边框绘制到imageview或textview的一个角落

    我需要在我的应用程序中为图像视图或文本视图绘制边框 但我只需要在一个角落绘制它 就像图像一样 我做了一个形状 但我在所有 4 个边上都有边框
  • Rails 控制台无法运行

    rbenv 红宝石版本 2 6 6 导轨版本 5 1 4 我正在较旧的代码库中工作 ruby 2 6 6 rails 5 4 1 这是我每天使用的代码库 我必须通过 rbenv 下载一个新的 ruby 版本作为单独的存储库 这样做在我的旧代
  • 如何检测被覆盖的 CSS 属性?

    I can get all css properties for an element with document stylesheets but some of those are not active because those pro
  • a:悬停颜色不起作用

    一件很奇怪的事情 我想在悬停时更改链接的文本颜色和背景颜色 这是代码 css link menu a color white display block height 100 width 100 text decoration none t
  • Python re无限执行

    我正在尝试执行这段代码 import re pattern r w w s re compiled re compile pattern results re compiled search COPRO HORIZON 2000 HOR p
  • 如何在 jQuery 中将标题转换为 URL slug?

    我正在 CodeIgniter 中开发一个应用程序 我试图在表单上创建一个字段来动态生成URL slug 我想做的是删除标点符号 将其转换为小写 然后用连字符替换空格 例如 Shane s Rib Shack 将变成 shanes rib
  • 如何使用 Rspec 测试具有嵌套路由的控制器?

    我有 2 个使用轨道脚手架生成器创建的控制器 我希望它们嵌套在一个名为 demo 的文件夹中 所以运行 rails g scaffold demo flows rails g scaffold demo nodes 然后我决定将节点嵌套在流
  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • 在 Chrome 中隐藏 HTML 时间输入字段上的图标

    在 Chrome 中 当您type time 属性到输入框 您会在输入旁边看到一个小图标时钟图标 有没有办法去掉这个小时钟图标 基于这个问题的答案 将日期输入三角形更改为日历图标 https stackoverflow com questi
  • CSS 标签“object-fit:cover”不会在 Chrome 中裁剪/剪辑视频

    CSS tag object fit cover无法按预期在 Chrome 中剪辑 裁剪视频 这种情况仅适用于视频且仅在 Chrome 中发生 图像在 Chrome 中正常 在所有其他经过测试的浏览器中 图像和视频都工作正常 The beh
  • Rails:named_scope、lambda 和块

    我认为以下两个是等效的 named scope admin lambda company id conditions gt company id company id named scope admin lambda do company
  • 如何对多行文本中的每一行应用填充?

    我已将背景颜色应用于 span 标签 也有左和右padding设置在它上面 问题是 padding仅适用于左侧 开始 和右侧 结束 span 而不是当文本换行时每行的左侧 开始 和右侧 结束 我该如何应用左和右padding to the
  • Rails - 渲染:目标锚标记的操作?

    我希望像这样使用渲染 render action gt page form 我也尝试过这个 render template gt site page form 那也没用 这个特定页面上的表单位于最底部 如果提交时发生任何错误 我不希望用户被

随机推荐

  • Postgres 列名或表名何时需要引号,何时不需要?

    让我们考虑以下 postgres 查询 SELECT FROM MY TABLE WHERE bool var FALSE AND str var something 当我删除周围的引号时 查询无法正确响应 str var 但当我做同样的事
  • 如何使用我们的 T4 模板生成器包含自定义实用程序类?

    如何使用我们的 T4 模板生成器包含自定义实用程序类 我尝试向项目添加一个模块 但似乎无法将其包含在内 以便我的生成器使用其中的方法 Thanks 您无法从模板访问项目中的任何代码 即使可以 它会如何执行 该模板在设计时执行 使用 Inhe
  • 运行 selenium 独立服务器和集线器/节点设置有什么区别

    我从 selenium 独立服务器设置开始 java jar selenium server standalone 2 32 0 jar 这使我能够成功连接并运行我的测试 同时运行多个浏览器 当我使用以下设置作为集线器时有什么区别 java
  • DropDownList 的 SelectedIndexChanged 事件未触发

    我的网页中有一个 DropDownList 对象 当我单击它并选择不同的值时 没有任何反应 即使我有一个函数连接到SelectedIndexChanged event 首先 实际对象的 HTML 代码
  • 在 Axis2 中创建自定义异常

    我正在使用 Axis2 1 5 2 和 Eclipse 我使用 Eclipse 生成 WSDL 并根据生成的 WSDL 生成客户端代码 我创建了一个我的服务可以抛出的自定义异常 创建网络服务时一切看起来都正常 Web 服务成功启动 我可以通
  • Golang 模板变量 isset

    我创建了一个函数来检查变量是否已定义 fm isset func a interface bool if a nil a a 0 fmt Println is not set return false fmt Println is set
  • IE8 预期标识符错误

    IE 7 和 8 抛出错误 通过 jQuery 预期标识符 jQuery document ready function jQuery i18n properties name messages path myproject js i18n
  • 请提供 ENGINE 值 Django 数据库配置

    伙计们 我很困惑 我已经安装了 Django 并正常运行服务器 但是当尝试配置数据库并运行 db 同步命令时 它崩溃 返回我的 ENGINE 参数不正常 但设置文件正常 按照设置文件操作 DATABASES default ENGINE d
  • 嵌入式 Jetty - IllegalStateException:没有 SessionManager

    我在谷歌上找到了很多关于这个问题的参考 但没有答案 我正在使用最新版本的 jetty 8 1 2 v20120308 但我似乎无法获得能够使用会话的嵌入式 servlet 当然 该示例是用 scala 编写的 但任何 java 程序员都应该
  • 突然无法推送到heroku:“无法协商密钥交换方法”

    git Push heroku 突然失败了 我安装了 Node js 我认为它可能升级了一些东西并以某种方式破坏了它 我读过所有类似的帖子 它没有告诉我 提供 了哪个交换 并且一切看起来都匹配 但是调用失败 我不知所措 我成功执行了hero
  • asp.net mvc 单选按钮状态

    我正在为一个新项目尝试 asp net mvc 并且遇到了一些奇怪的事情 当我对文本框使用 MVC UI 帮助程序时 这些值在调用之间会保留下来 但是 当我使用一系列单选按钮时 选中状态不会持续存在 这是我认为的一个例子 li li
  • 在任何打开的工作簿中检测刚刚停用的工作表中的选择类型

    我想要一个方法来查询 改变后ActiveSheet 编辑 任何开放的Workbook 检测类型Selection在上一个活动表中 最重要的是 如果它是ChartObject or Range 如果它是一个Range 获取地址 这可能吗 ED
  • 无法从数据存储实体访问 ID 属性

    使用 Google App Engine SDK 和 Python 我遇到一个问题 我无法访问给定实体属性的 ID 属性 我可以访问的唯一属性是我的类模型中定义的属性 加上关键属性 请参阅下面的答案 class Question db Mo
  • pyproject.toml 文件的用途是什么?

    背景 我正准备尝试从 GitHub 下载的 Python 包 发现它没有setup py 所以我无法安装它 pip install e
  • python 正则表达式无法识别 Markdown 链接

    我正在尝试用 python 编写一个正则表达式来查找 Markdown 文本字符串中的 url 找到 url 后 我想检查它是否被 markdown 链接包裹 text 我对后者有疑问 我正在使用正则表达式 link exp 进行搜索 但结
  • 2个本地时间之间有多少个单位时间(10分钟,半小时)?爪哇8

    我想定义一个单位时间 例如12分钟或25分钟 以了解Java中2个LocalTime之间有多少个单位时间 例如 如果我定义 15 分钟作为单位时间 在 8 00 到 10 00 之间 我应该得到 8 次 您可以使用Duration http
  • Scala Future 和 Java Future 有什么区别

    Scala Future 和 Java Future 之间是否存在概念 功能或机械差异 从概念上讲 我看不出任何差异 因为它们都旨在提供异步计算的机制 主要不便之处是java util concurrent Future事实上 如果不阻塞就
  • .NET DataTable 在 Load(DataReader) 上跳过行

    我正在尝试使用以下命令填充 DataTable 以构建 LocalReport MySqlCommand cmd new MySqlCommand cmd Connection new MySqlConnection Properties
  • 如何将行单击上选择的多行提交到 JqGrid 中的数据库?

    我有一个JqGrid当我必须选择多行并单击释放按钮时 它需要将这些列发送到数据库 我怎样才能实现这个目标 我必须发送数据吗JSON格式 是的 您必须使用 JSON 或 XML 任何格式都可以 您可以使用 JSON stringify 并使用
  • Rails 4:如何识别和格式化模型属性中的链接、主题标签和提及?

    在我的 Rails 4 应用程序中 我有一个Post模型 与 copy and short copy作为自定义属性 字符串 这些属性包含社交媒体 Facebook Twitter Instagram Pinterest 等 的副本 我在我的