解析 @username 的帖子

2023-12-23

我建立了一个类似 Twitter 的@replies,允许用户通过用户每日帖子相互联系......类似于 stackoverflow。

以此作为指导https://github.com/kltcalamay/sample_app/compare/original-version...master https://github.com/kltcalamay/sample_app/compare/original-version...master

如何解析/扫描帖子,然后将 @usernames 替换为该用户页面的链接

帖子示例。

Kevins Post:
 @Pzpcreations @john @steve hey everyone lets all hang out today

我想扫描/解析该帖子,然后将用户 @Pzpcreations @john @steve 链接到他们的个人资料

我尝试在 Dailypost 模型中创建一个方法,将用户名存储在数组中......但不知道如何替换它们并将它们链接到适当的用户页面

def username_link
  str = self.content_html
  recipient = str.scan(USERNAME_REGEX)
end

这给了我 [“@Pzpcreations”,“@john”,“@steve”]

请帮助我....rails 新手:)

MODELS

class Recipient < ActiveRecord::Base
  attr_accessible :dailypost_id, :user_id

  belongs_to :user
  belongs_to :dailypost

end

class User < ActiveRecord::Base
  attr_accessible :name, :email, username

  has_many :dailyposts, dependent: :destroy

  has_many :replies, :class_name => 'Recipient', :dependent => :destroy
  has_many :received_replies, :through => :replies, :source => 'dailypost'

end

class Dailypost < ActiveRecord::Base  
  attr_accessible :content, :recipients
  belongs_to :user

  ###What is the Correct REGEX for Rails 4?
  USERNAME_REGEX = /@\w+/i

  has_many :recipients, dependent: :destroy
  has_many :replied_users, :through => :recipients, :source => "user"

  after_save :save_recipients

  **private**

    def save_recipients
      return unless reply?

      people_replied.each do |user|
        Recipient.create!(:dailypost_id => self.id, :user_id => user.id)
      end
    end

    def reply?
      self.content.match( USERNAME_REGEX )
    end

    def people_replied
      users = []
      self.content.clone.gsub!( USERNAME_REGEX ).each do |username|
        user = User.find_by_username(username[1..-1])
        users << user if user
      end
      users.uniq
    end
end

SCHEMA

create_table "recipients", :force => true do |t|
  t.string   "user_id"
  t.string   "dailypost_id"
  t.datetime "created_at",   :null => false
  t.datetime "updated_at",   :null => false
end

[#<Recipient id: 7, **user_id: "103"**, dailypost_id: "316", created_at: "2013-06-18 
10:31:16", updated_at: "2013-06-18 10:31:16">]

User_ID in recipients are the users that are mentioned in the Dailypost.

VIEWS

<%= link_to dailypost.username_link %>

您可以将每场比赛传递到一个块。 在此块中,您返回所需的链接,例如

def username_link
  str = self.content_html
  str.gsub!(USERNAME_REGEX).each do |recipient|
    if User.find_by_name(recipient) 
      "[link to #{recipient}]"
     else 
       recipient
     end
  end
end

Edit

在中创建一个辅助函数app/helpers/posts_helper.rb

def post_with_links(post)
  post.content_html.gsub(/@\w+/).each do |username|
    user = User.find_by_username(username[1..-1])
    if user
      link_to username, user
    else
      username
    end
end

在你看来使用这个

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

解析 @username 的帖子 的相关文章

随机推荐

  • C# - 文件关联对注册表项“HKEY_CLASSES_ROOT\”的访问被拒绝

    我目前有一个使用注册表设置文件关联的程序 注意 它是 NET 2 0 所以我必须通过注册表方法 问题是 由于它正在尝试写入 HKCR 因此可能会遇到管理问题 在其他计算机上 是否有更通用的方法来设置文件关联 对于 NET 2 0 例如使用
  • 无法将本地更改推送到现有远程分支

    有一个名为 my remote 的远程分支 我之前已毫无问题地推送到该分支 截至今天 我无法推动并且出现不同的错误 我得到的第一个错误是 hint Updates were rejected because a pushed branch
  • 无法文本对齐:CSS 居中

    我似乎无法将 主页 按钮置于中央 主文本位于左侧而不是中心 我的 htm 和 css 链接如下 html h1 Bully Free Zone h1 h2 Online harassment has an off line impact h
  • 打字稿 |每次调用函数时都会调用一个函数

    我正在尝试编写 Typescript API 服务 对于该服务 我需要一种方法来检查该方法是否存在 例如函数get叫做 我意识到我可以这样做 get endpoint string this handleRequest post endpo
  • 调整 UIWebView 文本大小

    我试图让用户调整给定网页的文本大小 我在 Xcode 6 中使用 Swift HTML 文件 h1 My First Heading h1 My first paragraph 这是我调用的快速函数来尝试更改大小 func changeWe
  • 如何使用Monitor(DDMS)工具调试应用程序

    这些天我正在将开发环境从 Eclipse 切换到 Android Studio 我真的很喜欢它的自动完成功能以及这个 IDE 提供的许多其他功能 但是 我在调试时遇到了一些问题 我希望使用这个IDE提供的Monitor工具 自带的DDMS和
  • 在单元测试中抑制 Vue 警告

    我试图按照此处列出的配置在测试中抑制警告 https vue test utils vuejs org api config html silent https vue test utils vuejs org api config htm
  • JavaFX 制作相同动画的副本

    我正在尝试扩展之前的作业 它是画一个风扇 并有一个滑块来控制播放速度 以及播放 暂停和反转风扇的按钮 这是我的该作业的代码 public class FanWithControls extends Application Override
  • 500 HTTP POST 请求的内部错误

    我正在使用下面的代码使用 HTTP POST 上传文件 但我从服务器收到 500 内部服务器错误响应 您能看一下并让我知道哪个代码部分是罪魁祸首 丢失的吗 HTTPS 连接没有错误 我认为标头存在问题 因此服务器不接受此请求 Check s
  • PHP/MYSQL AJAX 聊天

    寻找一个开源的php mysql ajax聊天室 不是1对1的私人聊天 你们会推荐什么 我将需要创建数百个聊天室实例 例如 每个用户组都有自己的专属聊天室 看看 phpFreeChat 这是一个易于实施的活跃项目 http www phpf
  • 如何在OpenAI中创建新的健身房环境?

    我的任务是制作一个 AI 代理 该代理将学习使用 ML 玩视频游戏 我想使用 OpenAI Gym 创建一个新环境 因为我不想使用现有环境 如何创建新的自定义环境 另外 我是否可以通过其他方式开始开发 AI 代理来玩特定的视频游戏 而无需
  • Django 1.0.2 中的多个数据库与自定义管理器

    我在用户组中询问了这个问题 但没有得到回应 所以我想我会在这里尝试一下 我正在尝试设置自定义管理器来连接到另一个数据库 在与我的默认 mysql 连接相同的服务器上 我努力了 遵循示例here http groups google com
  • 应用程序不使用 MSAL (react-aad-msal) 从缓存中获取访问令牌

    authProvider getAccessToken 为每个 API 调用调用身份验证端点 而不是从缓存中获取它 我不知道问题是否出在 Msal 中的 AcquireTokenSilent 或 React aad msal 中的 getA
  • 为什么静态块中的代码不执行?

    当我打印constant in main the static块不执行 但是当我打印时stat 它确实执行了 有什么重要意义吗static final在Java中 package com test doubt class Doubt pub
  • 如何编写包含“主体块”的自定义 WorkFlow 4 代码活动?

    这可能吗 我知道这是针对 MS 的 因为他们有 WF 活动包 但我不确定它是如何完成的 如果能够使用带有 Body 块的活动来插入其他活动 按钮等 那就太好了 如果不是太麻烦和 或耗时的话 如果您遵循一些规则 这很容易 以下是具有子项的 N
  • 为什么是 em 而不是 px?

    我听说你应该在样式表中定义尺寸和距离em而不是以像素为单位 所以问题是我为什么要使用em代替px在 CSS 中定义样式时 有一个很好的例子来说明这一点吗 说一个比另一个更好的选择是错误的 或者两者都不会在规范中给出自己的目的 甚至值得注意的
  • 为什么所有 NUL 都从我的脚本中删除?

    它看起来像 bash 还有 dash 从我的脚本中过滤掉任何 ASCII NUL printf test 000a echo test sh 1 printf test 001a echo test sh 2 printf ec 000ho
  • Heroku 混合内容 HTTPS/HTTP 问题

    我将应用程序部署到 Heroku 但在 Chrome 控制台中不断收到此错误 bundle js 11892 Mixed Content The page at https herokuapp com login was loaded ov
  • 跨线程编组 COM 接口的首选方法是什么?

    与 CoMarshalInterThreadInterfaceInStream 和 CoGetInterfaceAndReleaseStream 相比 使用 GIT 跨线程编组 COM 接口有哪些优点 缺点 是否有充分的理由选择一种方法而不
  • 解析 @username 的帖子

    我建立了一个类似 Twitter 的 replies 允许用户通过用户每日帖子相互联系 类似于 stackoverflow 以此作为指导https github com kltcalamay sample app compare origi