51224bdd17878b3b19e8987e9bb336a2

In following snippet I just assign the values from database depend upon conditions.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  
  if logged_in?
      @email = current_user.email  
      @mobile_no = current_user.mobile_no 
      if current_user.carrier_id == 0
        @carrier = ""
      else
        @carrier = current_user.carrier.name
      end
  else
      @email = ""  
      @mobile_no = ""  
      @carrier = ""
  end

Refactorings

No refactoring yet !

880cbab435f00197613c9cc2065b4f5a

danielharan

June 17, 2008, June 17, 2008 13:50, permalink

No rating. Login to rate!

You could put those in a helper instead of assigning them.

Again, "if current_user.carrier_id == 0" smells. You should be able to do current_user.carrier? and leave out implementation details that belong in the model.

1
2
3
4
def email
  return '' unless logged_in?
  current_user.email
end
51224bdd17878b3b19e8987e9bb336a2

DG

June 18, 2008, June 18, 2008 04:39, permalink

No rating. Login to rate!

Thanks danielharan,
Well "if current_user.carrier_id == 0" smells,but I have to make it that way.(In table I need to store default as 0 )
significantly I am new to RoR.
In above comment you said I "could put those in helper instead of assigning them".
could you please explain me that. How

F6eddf2f983d23c2d031e407852625e9

jamesgolick

June 20, 2008, June 20, 2008 01:08, permalink

2 ratings. Login to rate!

I prefer how this reads (with the explanation of the helper in the model)

user.rb

1
2
3
4
def carrier?
  carrier_id != 0
end

original submission

1
2
3
4
@email     = logged_in? ? current_user.email     : ""
@mobile_no = logged_in? ? current_user.mobile_no : ""
@carrier   = logged_in? && current_user.carrier? ? current_user.carrier.name : ""
Avatar

Eric

June 30, 2008, June 30, 2008 04:38, permalink

No rating. Login to rate!

I'm not sure why you need to store the default carrier_id as 0, but I think that it may be more worthwhile to refactor that implementation instead of this controller. ids are symbolic representations of records. It's nearly always better to analyze a record based on the record itself, rather than its id.

user.rb

1
2
3
4
5
6
7
8
9
10
11
class User < ActiveRecord::Base

  def carrier?
    ...
  end

  def carrier_name
    carrier.name if carrier?
  end

end  

controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. I don't think you're gaining anything by setting these variables to empty strings when the user isn't logged in. nil should do the job just fine.

  def show
    if logged_in?
        @email               = current_user.email  
        @mobile_no      = current_user.mobile_no 
        @carrier_name = current_user.carrier_name
     end
   end

# 2. I tend to only assign records to separate instance variables, rather than assigning individual attributes. Assigning attributes can quickly get confusing and difficult to manage. In this case I think it's fine, if that's what you're comfortable with, as long as you're not assigning to more than 3-4 instance variables in your controller.

  def show
    # My preference. No need for any of that code in the controller...
  end

Your refactoring





Format Copy from initial code

or Cancel