どうやらcode_128のモード「A」はBarbyのスモールキャップには適していません。
そのため、モードBを機能させる必要がありました。
現在公開されているhas_barcodeのgemバージョンはモード「A」を強制するため、githubに提案を追加しながら、小さな「ホームパッチ」を追加しました。
これが私の最終的なhas_barcode.rbファイルです:
require "rubygems"
require "i18n"
require "active_support"
require "active_support/hash_with_indifferent_access.rb"
require "active_support/inflector.rb"
require "barby"
require "has_barcode/configuration"
module HasBarcode
def self.included(base)
base.send(:extend, ClassMethods)
end
module ClassMethods
def has_barcode(*args)
options = args.extract_options!
@@barcode_configurations ||= {}
@@barcode_configurations[args.first] = HasBarcode::Configuration.new(options)
define_method args.first do
if options[:type] == :code_128
@@barcode_configurations[args.first].barcode_class.new(options[:value].call(self), options[:code128])
else
@@barcode_configurations[args.first].barcode_class.new(options[:value].call(self))
end
end
define_method "#{args.first}_data" do |opts|
if opts
send(args.first).send("to_#{options[:outputter]}", opts)
else
send(args.first).send("to_#{options[:outputter]}")
end
end
end
def barcode_configurations
@@barcode_configurations
end
end
end
私のモデル:
has_barcode :barcode,
outputter: :svg,
type: :code_128,
code128: 'B',
value: Proc.new { |p| "#{p.number}" }
と私の見解:
<%= my_model.barcode_data(xdim:2, height:60).html_safe %>
現在の日付(2012-12-05)では、現在のgemは、xdimやheightなどの出力引数を渡すことができる最新の変更で更新されていないことに注意してください。
この回答は、最新のコード更新(問題関連)と私自身の提案に基づいており、ここで見つけることができます
このソリューションはhas_barcodegemに組み込まれていませんが、Barbyを直接使用します。
私のモデルに追加:
def get_barcode(number)
require 'barby'
require 'barby/barcode/qr_code'
require 'barby/outputter/svg_outputter'
barcode = Barby::Code128B.new("#{number}")
barcode.to_svg(xdim:2, height:60)
end
ビューで:
<%= my_model.get_barcode(my_model.number).html_safe %>