のようなレコードがすでに作成されています
Company "Life"
種にこの記録を作成する方法
сompany-life
パラメータ化を使用しましたが、次のようになります。
company-quot-life-quot
私が理解しているように.gsub(""", "")
、例外のリストが大きすぎるため、実装には適していません
raw形式でレコードを作成する方法はありますか? (後でパラメータ化するため)
前もって感謝します!
のようなレコードがすでに作成されています
Company "Life"
種にこの記録を作成する方法
сompany-life
パラメータ化を使用しましたが、次のようになります。
company-quot-life-quot
私が理解しているように.gsub(""", "")
、例外のリストが大きすぎるため、実装には適していません
raw形式でレコードを作成する方法はありますか? (後でパラメータ化するため)
前もって感謝します!
Rails以外のアプローチは次のとおりです。
require 'cgi'
str = 'Company "Life"'
puts CGI.unescape_html(str).gsub(/"/, '').gsub(/\s+/, '-').downcase
# => company-life
そして、純粋な正規表現ソリューション:
puts str.gsub(/&\w+;/, '').gsub(/\s+/, '-').downcase
# => company-life
また、Rails 内にいる場合 (@nzifnab に感謝):
str.gsub(/&\w+;/, '').parameterize
@meager が言ったように、そもそも html でエンコードされたエンティティをデータベースに保存するべきではありません"
。理論的には、これは機能します:
class Page < ActiveRecord::Base
before_validation :unescape_entities
private
def unescape_entities
self.name = CGI.unescape_html(name)
end
end
name
しかし、最初にhtmlエンティティを使用してどうやってそこにたどり着くのか、まだ興味があります。あなたのアクション/フォームはどのように見えますか?
"Company "Life"".gsub(/&[^;]+;/, "-").parameterize.downcase
# => "company-life"
まず、gsub が html エンティティを取り除き、次に parameterize が Ascii 英数字以外のすべてを取り除き (そしてそれらをダッシュに置き換え)、次に小文字にします。「_」も保持されることに注意してください。それらが気に入らない場合は、別のものgsub('_', '-')
が必要です。
"Company "Life"".html_safe.parameterize