Newbie question

Hi all,
  I'm developing a rails web app here at work and I keep running into
a common thing in terms of setting instance variables with the property of a
form's parameter value. Basically I want the variable to take the
parameter's value if it exists, and to otherwise use a reasonable default.

I keep writing code like this:
    if @params["limit"]
      @limit = @params["limit"]
    else
      @limit = 50
    end

    if @params["chain"]
      chain = @params["chain"]
    else
      chain = 1
    end

Can someone please point me to a simpler, more succinct "ruby" way of doing
this?

Thanks,
Chris

@limit = @params["limit"] || 50

···

On Dec 3, 2004, at 12:51 PM, Williams, Chris wrote:

Hi all,
  I'm developing a rails web app here at work and I keep running into
a common thing in terms of setting instance variables with the property of a
form's parameter value. Basically I want the variable to take the
parameter's value if it exists, and to otherwise use a reasonable default.

I keep writing code like this:
    if @params["limit"]
      @limit = @params["limit"]
    else
      @limit = 50
    end

    if @params["chain"]
      chain = @params["chain"]
    else
      chain = 1
    end

Can someone please point me to a simpler, more succinct "ruby" way of doing
this?

Thanks,
Chris

Francis Hwang

Williams, Chris wrote:

Hi all,
  I'm developing a rails web app here at work and I keep running into
a common thing in terms of setting instance variables with the property of a
form's parameter value. Basically I want the variable to take the
parameter's value if it exists, and to otherwise use a reasonable default.

I keep writing code like this:
    if @params["limit"]
      @limit = @params["limit"]
    else
      @limit = 50
    end

    if @params["chain"]
      chain = @params["chain"]
    else
      chain = 1
    end

Can someone please point me to a simpler, more succinct "ruby" way of doing
this?

The || operator works beautifully in this kind of situation:

   @limit = @params["limit"] || 50
   chain = @params["chain"] || 1

Thanks,
Chris

- Jamis

···

--
Jamis Buck
jgb3@email.byu.edu
http://www.jamisbuck.org/jamis

Williams, Chris wrote:

I keep writing code like this:
    if @params["limit"]
      @limit = @params["limit"]
    else
      @limit = 50
    end

    if @params["chain"]
      chain = @params["chain"]
    else
      chain = 1
    end

I'd do something like this

defaults = {
   "limit" => 50,
   "chain" => 1
   # more defaults
}
@values = defaults.merge(@params)

And then do @values["limit"] instead of @limit. This however only makes sense when there is a logical connection between those values. I'd prefer it in that case because it is way less duplication.