Rubyのキーワード引数にハッシュを指定
作ったgemのメンテナンスをしています。
キーワード引数でハッシュを引数にしたかったのですが、ActionView::Template::Error (unknown keyword: url):が出て辛かったのでメモします。
最初はこうしていました:
#以下で宣言 def render_geo(url: {}, high_accuracy: false, timeout: 8000, maximum_age: 2000, watch: false) render_url = self.controller_name + "/" render_url += url[:url][:action] unless url[:url][:action].nil? render partial: "/geo/get_geo", locals: {url: render_url, high_accuracy: high_accuracy, timeout: timeout, maximum_age: maximum_age, watch: watch} end #以下で使用 <%= render_geo(:url => {:controller => "users"}) %>
イメージとして、form_forのurlを指定するようにしたかったです。
ハッシュは最後
ハッシュを引数にしたいときは引数の最後にキーワードを置かなくてはいけないみたいです。
宣言部を以下のようにしました:
def render_geo(high_accuracy: false, timeout: 8000, maximum_age: 2000, watch: false, **url)
ハッシュの指定は**urlのようにしなければいけないのですね。