2

私は Twitter のような @replies を確立しました。これにより、ユーザーはユーザーの毎日の投稿を通じて互いに連絡を取ることができます...stackoverflow に似ています。

これをガイドとして使用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 モデルに作成しようとしましたが、IDK でそれらを置き換えて適切なユーザーページにリンクする方法

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

これは私に["@Pzpcreations"、"@john"、"@steve"]を与えます

私を助けてください....レールの初心者:)

モデル

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

スキーマ

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.

ビュー

<%= link_to dailypost.username_link %>
4

2 に答える 2