【问题标题】:Extract elements from a string representing an array从表示数组的字符串中提取元素
【发布时间】:2016-04-18 20:15:48
【问题描述】:

我的消息对象有一个链接属性@message.link,它是一个字符串。在将 message.link 保存到 db I URI.extract from message.body 之前:

["http://getbootstrap.com/javascript/#tabs", "http://paulgraham.com/re.html"]

一旦我将它保存到数据库 message.link 将被保存为:

"[\"http://getbootstrap.com/javascript/#tabs\", \"http://paulgraham.com/re.html\"]"

当我稍后从 db 获取数据时,如何从 message.link 字符串中获取数组?

["http://getbootstrap.com/javascript/#tabs", "http://paulgraham.com/re.html"]

要显示来自所有消息对象的链接,我应该如何提取链接?假设message(1).link 有一个链接,message(2) 有三个链接,我想将所有四个链接显示为@message_links 或任何实例变量的单独元素。

更新

方法有效,但无法显示 :created_at 并正确进行分页,因为@message_links2 将是一个链接数组。

@message_links = @conversation.messages.with_link.order(created_at: :desc).paginate(page: params[:page], per_page: 12)
@message_links2 = @message_links.map(&:link).flatten

【问题讨论】:

标签: ruby-on-rails arrays ruby string


【解决方案1】:

这是您需要序列化列的地方。然后你就不需要自己进行转换了。见:Using Rails serialize to save hash to database

【讨论】:

  • 您可以使用 flatten 和 map 显示数组中的所有项目:@messages.map(&:link).flatten => [link, link, link, link]
  • court3nay,我不明白如何混合不同的对象。在本例中,第一个链接属于 message(1),其他三个链接属于 message(2)?
  • 是的。由于你想对链接做什么并不明显,我给你一些一般的 ruby​​ 想法:) 你可能想为具有 has_many 关联的链接创建一个单独的类/表
  • 基本上,当用户创建聊天消息时,链接会被保存,因此用户可以从对话中找到所有链接。我不确定我是否需要一个新课程。我只会将链接显示为列表(有点索引页面),如果用户单击其中一个,则进入给定页面。因此,除了识别聊天消息中的链接并显示它们之外,我对链接什么都不做。你怎么看?我需要单独的课程吗?
  • court3nay,请查看更新后的问题。我想显示 12 个带有 created_at 属性的链接,但由于 @message_links2 是一个数组,我不能在它上面调用分页,并且它不包含 created_at 日期。如果我像在当前代码中那样调用 message.with_links 对象的分页,那么链接的数量会有所不同,因为不知道一个对象有多少个链接。
猜你喜欢
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 2021-10-14
相关资源
最近更新 更多