สัญลักษณ์มักจะแสดงเช่นนี้
:book_author_title
แต่ถ้าฉันมีสตริง:
"Book Author Title"
มีวิธีที่สร้างขึ้นใน rails / ruby เพื่อแปลงมันเป็นสัญลักษณ์ที่ฉันสามารถใช้:
สัญกรณ์ได้โดยไม่ต้องเปลี่ยนสตริงสตริง regex ดิบ?
สัญลักษณ์มักจะแสดงเช่นนี้
:book_author_title
แต่ถ้าฉันมีสตริง:
"Book Author Title"
มีวิธีที่สร้างขึ้นใน rails / ruby เพื่อแปลงมันเป็นสัญลักษณ์ที่ฉันสามารถใช้:
สัญกรณ์ได้โดยไม่ต้องเปลี่ยนสตริงสตริง regex ดิบ?
คำตอบ:
Rails มีActiveSupport::CoreExtensions::String::Inflections
โมดูลที่ให้วิธีการดังกล่าว พวกเขาทุกคนน่าดู สำหรับตัวอย่างของคุณ:
'Book Author Title'.parameterize.underscore.to_sym # :book_author_title
.to_s
และ.humanize
ควรทำผลงานเว้นเสียแต่ว่าคุณจะต้องใช้อักษรตัวพิมพ์ใหญ่แบบเต็ม
จาก: http://ruby-doc.org/core/classes/String.html#M000809
str.intern => symbol
str.to_sym => symbol
ส่งคืนสัญลักษณ์ที่สอดคล้องกับstr
การสร้างสัญลักษณ์หากไม่มีก่อนหน้านี้ Symbol#id2name
ดู
"Koala".intern #=> :Koala
s = 'cat'.to_sym #=> :cat
s == :cat #=> true
s = '@cat'.to_sym #=> :@cat
s == :@cat #=> true
สิ่งนี้สามารถใช้เพื่อสร้างสัญลักษณ์ที่ไม่สามารถแสดงโดยใช้:xxx
สัญลักษณ์
'cat and dog'.to_sym #=> :"cat and dog"
แต่สำหรับตัวอย่างของคุณ ...
"Book Author Title".gsub(/\s+/, "_").downcase.to_sym
ควรไป ;)
to_sym
] สามารถใช้เพื่อสร้างสัญลักษณ์ที่ไม่สามารถแสดงได้โดยใช้เครื่องหมาย: xxx" เป็นเช่นเดียวกับ:'cat and dog'
'cat and dog'.to_sym
:"cat and dog\n on a new line"
to_sym
"Book Author Title".parameterize('_').to_sym
=> :book_author_title
http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize
parameterize เป็นวิธีการรถไฟและมันช่วยให้คุณเลือกสิ่งที่คุณต้องการให้ตัวแยกเป็น มันเป็นเส้นประ "-" โดยค่าเริ่มต้น
สัญลักษณ์ฝึกงาน→ส่งคืนสัญลักษณ์ที่สอดคล้องกับ str สร้างสัญลักษณ์หากไม่มีอยู่ก่อนหน้านี้
"edition".intern # :edition
ใน Rails คุณสามารถทำได้โดยใช้underscore
วิธีการ:
"Book Author Title".delete(' ').underscore.to_sym
=> :book_author_title
รหัสที่ง่ายกว่าคือการใช้ regex (ทำงานกับ Ruby):
"Book Author Title".downcase.gsub(/\s+/, "_").to_sym
=> :book_author_title
นี่คือสิ่งที่คุณกำลังมองหาหรือไม่:
:"Book Author Title"
:)
นี่ไม่ใช่การตอบคำถาม แต่ฉันพบคำถามนี้เพื่อค้นหาคำตอบเพื่อแปลงสตริงเป็นสัญลักษณ์และใช้กับแฮช
hsh = Hash.new
str_to_symbol = "Book Author Title".downcase.gsub(/\s+/, "_").to_sym
hsh[str_to_symbol] = 10
p hsh
# => {book_author_title: 10}
หวังว่ามันจะช่วยให้คนอย่างฉัน!