1. ホーム
  2. ruby-on-rails

[解決済み] .callの役割は何ですか?

2022-03-05 14:55:42

質問

I 出くわした この方法は、最終的に .call が使われています。

def allow?(controller, action, resource = nil)
  allowed = @allow_all || @allowed_actions[[controller.to_s, action.to_s]]
  allowed && (allowed == true || resource && allowed.call(resource))
end

しかし ドキュメント をいつ、どのように使えばいいのかがよくわからないのです。 .call .

解決方法は?

の目的は .call メソッドを呼び出す/実行することです。 Proc/Method のインスタンスを作成します。以下の例を見れば、もっとわかりやすいかもしれません。

m = 12.method("+")
# => `method` gets the `+` method defined in the `Fixnum` instance
# m.class 
# => Method

m.call(3)    #=> 15
# `3` is passed inside the `+` method as argument 
m.call(20)   #=> 32

上記の例では Fixnum 12は、メソッド + が定義されている。

投稿された例では

def allow?(controller, action, resource = nil)
  allowed = @allow_all || @allowed_actions[[controller.to_s, action.to_s]]
  allowed && (allowed == true || resource && allowed.call(resource))
end

@allowed_actions[[controller.to_s, action.to_s]] が返されます。 Proc インスタンスと resourceparam/argument をメソッド呼び出しに変換します。

例えば

hash = {[:controller, :action] => 'value'}
# => {[:controller, :action]=>"value"} 

> hash[[:controller,:value]]
# => nil 

> hash[[:controller,:action]]
# => "value" 

ご参考まで : ルビーでは Array として KeyHash オブジェクトを作成します。