Ruby ArgumentError: 不明なキーワードですが、理由はわかりません
概要
シンプルな Ruby on Rails プラグインを作成しようとしています。 redcarpetable 関数が render_opts のハッシュを使用して呼び出されると、「ArgumentError: 不明なキーワード: render_opts」が発生します。関数のコード:
def redcarpetable(*fields, renderer: :default, as: [nil], prefix: "rendered", render_opts: {})
fields.each do |field|
if fields.count > 1
define_method "#{prefix}_#{field}" do
Carpet::Rendering.render(read_attribute(field), renderer_opts: render_opts, rc_renderer: renderer).html_safe
end # End defining the method dynamically.
else
if as[0]
as.each do |method_name|
define_method "#{method_name}" do
Carpet::Rendering.render(read_attribute(field), render_opts: render_opts, rc_renderer: renderer).html_safe
end # End defining the method dynamically.
end
else
define_method "rendered_#{field}" do
Carpet::Rendering.render(read_attribute(field), render_opts: render_opts, rc_renderer: renderer).html_safe
end # End defining the method dynamically.
end
end
end # End the fields loop.
end # End the redcarpet method.
関数の呼び出し方法:
redcarpetable :name, renderer: :simple_parser, as: [:cool_name, :rendered_name], render_opts: {:generate_toc_data: true}
レンダリング オプションのハッシュを許可するには、関数宣言に何を行う必要がありますか?完全なコード (十分に文書化されていない、またはまだリファクタリングされていません) はここにあります。
解決策
Carpet::Rendering を次のように呼び出します。
Carpet::Rendering.render(read_attribute(field),
render_opts: render_opts, rc_renderer: renderer
).html_safe
ただし、このオプションは実際には renderer_opts と呼ばれます。次のように変更するだけです。
Carpet::Rendering.render(read_attribute(field),
renderer_opts: render_opts, rc_renderer: renderer
).html_safe
メソッドのシグネチャでも変更したい場合があります。