# More idiomatic way of writing a filter

**URL:** <https://www.ruby-forum.com/t/more-idiomatic-way-of-writing-a-filter/96643>\
**Category:** Rails\
**Created:** [June 30, 2006, 2:15pm UTC](https://www.ruby-forum.com/t/more-idiomatic-way-of-writing-a-filter/96643 "2006-06-30T14:15:44Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![joelraj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9d8465/32.png) [@joelraj](https://www.ruby-forum.com/u/joelraj)\
**Post date:** [June 30, 2006, 2:15pm UTC](https://www.ruby-forum.com/t/more-idiomatic-way-of-writing-a-filter/96643/1 "2006-06-30T14:15:44Z")

</div>

Is there a more elegant way of writing this?

```
 def verify_user
   @user = User.find_by_username params[:username]
   if @user.nil?
     message = xml.error do |xm|
       xm.message "User does not exists: #{params[:username]}"
     end
     render :xml => message
     return false
   else
     true
   end
 end

Thanks, Joel

```

–  
[http://wagerlabs.com/](http://wagerlabs.com/)

---

<div class="post-metadata">

**Author:** ![joelraj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9d8465/32.png) [@joelraj](https://www.ruby-forum.com/u/joelraj)\
**Post date:** [June 30, 2006, 2:25pm UTC](https://www.ruby-forum.com/t/more-idiomatic-way-of-writing-a-filter/96643/2 "2006-06-30T14:25:08Z")

</div>

I would do it like that…

def get\_user  
unless @user = User.find\_by\_username(name = params[:username])  
render xml.error do |xm|  
xm.message “User does not exists: #{name}”  
end  
end  
@user  
end

Joel R. schrieb:

---

<div class="post-metadata">

**Author:** ![joelraj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9d8465/32.png) [@joelraj](https://www.ruby-forum.com/u/joelraj)\
**Post date:** [June 30, 2006, 5:32pm UTC](https://www.ruby-forum.com/t/more-idiomatic-way-of-writing-a-filter/96643/3 "2006-06-30T17:32:09Z")

</div>

yes, I you need :xml =\>

I was sloppy 🙂

Joel R. schrieb:

---

<div class="post-metadata">

**Author:** ![joelraj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9d8465/32.png) [@joelraj](https://www.ruby-forum.com/u/joelraj)\
**Post date:** [June 30, 2006, 5:38pm UTC](https://www.ruby-forum.com/t/more-idiomatic-way-of-writing-a-filter/96643/4 "2006-06-30T17:38:43Z")

</div>

But then you need to write something like

render :xml =\> (xml.error do |xm|  
xm.message …  
end)

which looks a bit ugly with the parens in place. Any workaround apart  
from stuffing the XML into a variable first?

```
Thanks, Joel

```

–  
[http://wagerlabs.com/](http://wagerlabs.com/)

---

<div class="post-metadata">

**Author:** ![joelraj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/9d8465/32.png) [@joelraj](https://www.ruby-forum.com/u/joelraj)\
**Post date:** [June 30, 2006, 2:32pm UTC](https://www.ruby-forum.com/t/more-idiomatic-way-of-writing-a-filter/96643/5 "2006-06-30T14:32:03Z")

</div>

Cool! Wouldn’t you need to give render :xml =\> to make sure the  
content type is set, though?

On Jun 30, 2006, at 1:22 PM, Pete wrote:

> I would do it like that…
> 
> def get\_user  
> unless @user = User.find\_by\_username(name = params[:username])  
> render xml.error do |xm|  
> xm.message “User does not exists: #{name}”  
> end  
> end  
> @user  
> end

–  
[http://wagerlabs.com/](http://wagerlabs.com/)
