2016-04-25 4 views
1

ありがとうございました! 私は自分のレールアプリにハッシュタグのようなツイッターを保存しようとしています。ユーザーは#hashtagシンボルの先頭にタグを入力します。ただし、空の文字列を保存し続けます。私はそれを戦うために追加の文を追加しましたが、今はタグを保存しません。 コード:ハッシュタグのようなTwitterをRegex Railsで保存

def tag_list=(names) 
    self.tags = names.split(/\B#\w+/).map do |n| 
    unless n.strip == "" || n.strip == nil 
     Tag.where(name: n.strip).first_or_create! 
    end 
    end 
end 

私もまた同じことを返し、次の正規表現しようとしました:あなたの最初の正規表現は完全に動作しますが、あなたはscan代わりのsplit、そうするようにコードを使用する必要があります

/\B#\w+/ 

/(?:^|\s)(?:(?:#\d+?)|(#\w+?))\s/i 

/(?:\s|^)(?:#(?!\d+(?:\s|$)))(\w+)(?=\s|$)/i 
+0

でハッシュタグを保存したい場合は、tag.remove('#')を必要としないことがあり、一度

  • 保存するために最後に使用scan
  • 利用find_or_initialize_by代わりのwhereその後、first_or_create!
  • 使用save! ['String#scan'](http://ruby-doc.org/core-2.3.0/String.html#method-i-scan)は[' String#split']よりもこれに適したツールかもしれません(http://ruby-doc.org/core-2.3.0/String.h tml#method-i-split)。文字列を分割して文字列に分割しようとしているわけではありません。文字列をスキャンして特定のパターンを見つけることを試みています。 –

  • 答えて

    1

    をタグを割り当てるようになります:

    def tag_list=(names) 
        self.tags = names.scan(/\B#\w+/).map do |tag| 
        Tag.find_or_initialize_by(name: tag.remove('#')) 
        end 
        save! 
    end 
    

    変更は以下のとおりです。

    • あなたは#接頭
    +0

    ありがとうHieu Pham - これは完璧に動作します! – robinyapockets

    関連する問題