simple thing about an undefined method throwing me

Hey there,
i am having some trouble with a method in a model ( i am new to rails
and ruby ) comming from python

so anyway, here is what i have in my Site.rb model:

class Site < ActiveRecord::Base
    belongs_to :group
    belongs_to :status_sensor
    has_many :site_options

    def has_pressure_sensor
        y_n = 'n'
        self.sites.each do |site|
            if site.option = 'pressure'
                y_n = 'y'
            end
        end
    end

end

and in my view:
<table>
    <th>site</th>
    <th>current status</th>

    <% @group.sites.each do |site| %>
    <tr>
        <td><%= site.site_name %></td>
        <td>
            <%= site.status_sensor.page_value %>
            <img src="<%=
fetch_circle_for(site.status_sensor.page_value)%>" %>
        </td>
        <td>
            <%= site.has_pressure_sensor %>
        </td>
    </tr>

<% end %>

this is what i get:

undefined method `has_pressure_sensor' for #<Site:0xb750e6ac>

i just want it to print out a y or n for yes or no

if you have read this far, thank you for your time.
shawn

Hey there,
i am having some trouble with a method in a model ( i am new to rails
and ruby ) comming from python

so anyway, here is what i have in my Site.rb model:

class Site < ActiveRecord::Base
   belongs_to :group
   belongs_to :status_sensor
   has_many :site_options

   def has_pressure_sensor
       y_n = 'n'
       self.sites.each do |site|
           if site.option = 'pressure'
               y_n = 'y'
           end
       end
   end

Hrm... I don't know the rest of your models, but guessing I think your
method should look more like this if only because your calling
'self.sites' which according to your model above a site doesn't have
sites...

def has_pressure_sensor?
   self.site_options.each do |option|
     return true if option == 'pressure'
   end
   false
end

That will return true if one of the site_options for that site equals
'pressure' otherwise false. The '?' in the name is a ruby convetion when
you're querying truth/false-ness.

Then in your view you could do:

<%= site.has_pressure_sensor? ? 'yes' : 'no' %>

As for why it's not being seen, perhaps you are running in production
mode? Or for some other reason need to restart your rails app.

-philip

cool, thanks very much
sk

woops, it isn't working right.

it is printing no on all , even the ones that should print yes.

in my SiteOption model i have belongs_to :site
and in Sites.rb model i have
has_many :site_options

i have checked the options for the ones i am listing and two of the 6
have the option of pressure in the site_options table.

anything else i may have left out ?

sk

Hey,

comments below:

woops, it isn't working right.

it is printing no on all , even the ones that should print yes.

in my SiteOption model i have belongs_to :site
and in Sites.rb model i have
has_many :site_options

i have checked the options for the ones i am listing and two of the 6
have the option of pressure in the site_options table.

anything else i may have left out ?

I assume that you're using the code for has_pressure_sensor that Phil
Hallstrom put in his email - right?

def has_pressure_sensor?
    self.site_options.each do |option|
      return true if option == 'pressure'
    end
    false
end

Looking at that (and your has_many :site_options) then of *course* it
always returns false.

return true if option == 'pressure'

Except the option isn't a String, it's a SiteOption so the comparison
is always false.

You haven't said what the members of site_option are but I'll take a
guess and say you want something
more like this:

def has_pressure_sensor?
   self.site_options.any? {|option| option.name == 'pressure'}
end

HTH,
Trevor

yep, that worked.
thanks so much !

sk