Help! cannot display model's attr_accessor

hi,

i m new to ruby on rails, this question might sound stupid, but i m
really confused by the relationship between attributes of the model
and the column in that model table.

i have two tables ‘institutions’ and ‘alerts’ as below:

Institutions:
id site created_at updated_at
1 default null null

alerts
id institution_id name value
1 1 testname testvalue

the corresponding models are:

alert.rb
class Alert < ActiveRecord::Base
belongs_to :institution

attr_accessor :name, :value

def self.find_all(institution_id)
find(:all, :conditions => “institution_id = ‘#{institution_id}’”)
end
end

=================================================
institution.rb
class Institution < ActiveRecord::Base
has_one :alerts

def find_alerts(institution_id)
Alert.find_all(institution_id)
end
end

in app/views/institutions/ i have edit.html.erb

Editing institution

<% form_for(@institution) do |f| %>
<%= f.error_messages %>

<%= f.label :site %>
<%= f.text_field :site %>

<%= f.label :id %>
<%= f.text_field :id %>

<% for alert in @institution.find_alerts(@institution.id) %>

<%=h alert.name %>

<% end %>

<%= f.submit 'Update' %>

<% end %>

<%= link_to ‘Show’, @institution %> |
<%= link_to ‘Back’, institutions_path %>

however it can only show the institution’s info but not alert’s info.

from irb i tried:
a = Alert.find_all(1)
it showed me the correct record
but if i tried: a.name
it complained: NoMethodError: undefined method ‘name’, but i already
defined attr_accessor :name, :value in alert.rb, how come it still
complained?

Thanks!

On Nov 11, 12:26 am, mars [email protected] wrote:

institution.rb
class Institution < ActiveRecord::Base
has_one :alerts

def find_alerts(institution_id)
Alert.find_all(institution_id)
end
end

orthogonal to this, but your associations are borked - that should be

has_many :alerts

and then you can do away with that find method and do
@institution.alerts

from irb i tried:
a = Alert.find_all(1)
it showed me the correct record
but if i tried: a.name

that dies because your find_all method returns an array and arrays
don’t have a name method.
Your view doesn’t display the name because you’ve put attr_accessor in
your model: Active Record creates accessor functions for you, by using
attr_accessor you’ve overridden those with versions that don’t look at
the values Active Record fetches from the database.

Fred