Zrobiłem metodę pomocnika, która przetwarza ciało Tweet, tak że jeśli są jakieś wymieniacze, do niego zostanie dodane link. Robi to, ale gdy nazwa użytkownika wspomniała pasuje do części dłuższej nazwy użytkownika (np @test @ Test2) tylko @test będzie połączony.

Powstały HTML wygląda tak: @test @test 2

Jak mogę sprawić, że wygląda tak: @test @ test2

To moja metoda pomocnika:

    def render_body(twit)
     return twit.body unless twit.mentions.any?
     processed_body = twit.body.to_s
     twit.mentions.each do |mention|
       processed_body = processed_body.gsub("@#{mention.user.username}", "<a href='/user/#{mention.user.id}'>@#{mention.user.username}</a>")
     end
     return processed_body.html_safe
    end

Sprawdziłem DB i zapisałem wzmiankę o @ Test2, po prostu nie jest w stanie go sprawić.

0
kyljmn 29 październik 2020, 15:16

1 odpowiedź

Najlepsza odpowiedź

Prosta substytucja ciągów nie działa tutaj, będziesz musiał użyć zakotwiczonego regexa. Oznacza to, że nigdy nie pasujesz do części słowa, tylko całe słowa:

processed_body = processed_body.gsub(/\b@#{mention.user.username}\b/, 
                                     "<a href='/user/#{mention.user.id}'>@#{mention.user.username}</a>")

Tutaj zastąpiliśmy ciąg wzoru Regex i używany \b, aby zakotwiczyć go do granic Word.

0
mikezter 29 październik 2020, 12:42