Hello all,
How do I use nested if conditions in my views? I have something like
if(res.birthdate_status == “0”) { if(res.gender == “M” || res.gender==“F”) print , //print a comma print res.age }
Hello all,
How do I use nested if conditions in my views? I have something like
if(res.birthdate_status == “0”) { if(res.gender == “M” || res.gender==“F”) print , //print a comma print res.age }
Well, you could do this, but I don’t like it:
<% if @user.birthdate_status == 0 %> <% if @user.gender == “M” || @user.gender == “F” %>
Thanx brian, yeah it does help.
Please also tell me another thing. I have the following in my index.rhtml
<% @result.each do |res| %>
<%= res.first_name %>
<%= res.register.language_speak
%>
<% end %>
My models are as follows
class Profile < ActiveRecord::Base
has_many :friends, :foreign_key => “user_id”
has_one :register, :foreign_key => “id”
def self.table_name() “mhp_profile” end end class Friend < ActiveRecord::Base belongs_to :profile
def self.table_name() “mhp_friends” end end class Register < ActiveRecord::Base belongs_to :profile
def self.table_name() “mhp_register” end end But Im getting the following error. Showing profile/index.rhtml where line #4 raised:
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.language_speak
Any idea what am I doing wrong…I have only one controller for profile as follows
class ProfileController < ApplicationController
def index
@result = Profile.find(:all)
end
end
It sounds like you don't have an associated "register" for this "res". A very simple solution is to test register, such as
<%= res.register.language_speak if res.register %>
or
<%= res.register.language_speak unless res.register.nil? %>
depending on how your mind likes to conceptualize things.
Peace, Phillip
I'd be tempted to add a method on the profile model to return language_speak (should this really be something like language_spoken ?).
class Profile ... def language_speak register.language_speak if register end end
and then change the view code to just:
<%= res.language_speak %>
The original code violates the so-called "law" of Demeter which says you shouldn't reach through an object to get to another one, the canonical example of a demeter violation would be having a PaperBoy object which grabs the Wallet object from one if its Customers to extract payment for a subscription.
Besides the obvious rudeness, doing this with a method in the model you have directly at hand isolates the view code from potential future refactorings.