DesignAssembler

備忘録に近い

Rubyのキーワード引数にハッシュを指定

作ったgemのメンテナンスをしています。

github.com

キーワード引数でハッシュを引数にしたかったのですが、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のようにしなければいけないのですね。

参考

qiita.com