# Pass argument to method in filters?

**URL:** <https://www.ruby-forum.com/t/pass-argument-to-method-in-filters/78669>\
**Category:** Rails\
**Created:** [December 7, 2006, 7:18pm UTC](https://www.ruby-forum.com/t/pass-argument-to-method-in-filters/78669 "2006-12-07T19:18:16Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![jemminger](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c0e974/32.png) [@jemminger](https://www.ruby-forum.com/u/jemminger)\
**Post date:** [December 7, 2006, 7:18pm UTC](https://www.ruby-forum.com/t/pass-argument-to-method-in-filters/78669/1 "2006-12-07T19:18:16Z")

</div>

how can i pass an argument to a method i’m passing to before\_filter?

e.g.:  
in application.rb:  
def require\_role(role)  
…  
end

in the controller:  
before\_filter :require\_role ‘foo’???

is this possible?

---

<div class="post-metadata">

**Author:** ![jemminger](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c0e974/32.png) [@jemminger](https://www.ruby-forum.com/u/jemminger)\
**Post date:** [December 7, 2006, 8:08pm UTC](https://www.ruby-forum.com/t/pass-argument-to-method-in-filters/78669/2 "2006-12-07T20:08:27Z")

</div>

According to the documentation at [http://api.rubyonrails.org/](http://api.rubyonrails.org/)

_append\_before\_filter_(\*filters, &block)

The passed filters will be appended to the array of filters that’s run \*  
before\* actions on this controller are performed.  
So you can pass filters and an optional block also to the before\_filter  
method. I don’t know if what you are trying to do is possible but  
passing in  
a block to do your logic is possible.

---

<div class="post-metadata">

**Author:** ![jemminger](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c0e974/32.png) [@jemminger](https://www.ruby-forum.com/u/jemminger)\
**Post date:** [December 7, 2006, 9:06pm UTC](https://www.ruby-forum.com/t/pass-argument-to-method-in-filters/78669/3 "2006-12-07T21:06:51Z")

</div>

aha - solved it:

before\_filter { |controller| controller.require\_role(‘some\_role’) }

thanks for your help.

---

<div class="post-metadata">

**Author:** ![jemminger](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c0e974/32.png) [@jemminger](https://www.ruby-forum.com/u/jemminger)\
**Post date:** [February 21, 2007, 5:55pm UTC](https://www.ruby-forum.com/t/pass-argument-to-method-in-filters/78669/4 "2007-02-21T17:55:01Z")

</div>

I found, I have to do:

before\_filter(:only =\> :edit) { |controller|  
controller.require\_role(‘some\_role’) }

---

<div class="post-metadata">

**Author:** ![jemminger](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/c0e974/32.png) [@jemminger](https://www.ruby-forum.com/u/jemminger)\
**Post date:** [February 21, 2007, 5:22pm UTC](https://www.ruby-forum.com/t/pass-argument-to-method-in-filters/78669/5 "2007-02-21T17:22:29Z")

</div>

Thanks to aha, it’s work well But I need the filter only for edit method  
like:

before\_filter :require\_role(‘some\_role’) :only =\> :edit

How can I do this?
