Tarscher
2008-Apr-17 08:24 UTC
undefined method `goals_against'' for #<YAML::Object:0x5584864>
Hi all, I have a serialized object (of class Goals) in my statistics table. I store it in the value row of statitics When I do: goals = Statistic.find(1).value.goals_against I get undefined method `goals_against'' for #<YAML::Object:0x5584864> (goals_against is a member of Goals) Someone knows why this happens? Thanks Stijn --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Craig Demyanovich
2008-Apr-17 14:00 UTC
Re: undefined method `goals_against'' for #<YAML::Object:0x5584864>
Would you share your model definitions and the code that you use to create/save the statistic and goals instances? Craig --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Tarscher
2008-Apr-17 14:51 UTC
Re: undefined method `goals_against'' for #<YAML::Object:0x5584864>
Thanks for the reply,
Please find the models, database and class definition below.
I try to get the goals object like this
@statistics = @event.statistics.find(:all, :include
=> :statistic_definition)
goals_a = @statistics.first.value.goals_against
=> undefined method `goals_against'' for
#<YAML::Object:0x579cbec>
The YAMLvalue in the database is:
--- !ruby/object:Goals
goals:
1: 2
goals_against: 2
goals_for: 2
version: 1
The model:
class Statistic < ActiveRecord::Base
belongs_to :event
belongs_to :statistic_definition
serialize :value
end
statitics table
id int(11)
value text
event_id int(11)
statistic_definition_id int(11)
The object I serialize
class Goals
attr_accessor :goals
attr_accessor :goals_for
attr_accessor :goals_against
attr_accessor :penalty_for
attr_accessor :penalty_against
def initialize(goals, goals_against, penalty_for = nil,
penalty_against = nil)
@version = 1
@goals = goals
set_goals_for()
@goals_against = goals_against.to_i
unless penalty_for.nil?
@penalty_for = penalty_for.to_i
@penalty_against = penalty_against.to_i
end
end
private
def set_goals_for
@goals_for = 0
@goals.each_value {|value| @goals_for += value.to_i }
end
end
On Apr 17, 4:00 pm, "Craig Demyanovich"
<cdemyanov...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> Would you share your model definitions and the code that you use to
> create/save the statistic and goals instances?
>
> Craig
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Craig Demyanovich
2008-Apr-17 17:35 UTC
Re: undefined method `goals_against'' for #<YAML::Object:0x5584864>
I tried something a bit simpler just to see if it would work. Here''s what I did. * create a new rails app (rails blah) * create the databases (rake db:create:all) * generate a Statistic model with a value column of type text (script/generate model statistic value:text) * run migrations (rake db:migrate) * create a non-ActiveRecord class named Goals with one attributed named goals_against * run the Rails console (script/console) and do the following:>> Statistic.create! :value => Goals.new(3)=> #<Statistic id: 2, value: #<Goals:0x1928960 @goals_against=3>, created_at: "2008-04-17 13:22:10", updated_at: "2008-04-17 13:22:10">>> stat = Statistic.find :first=> #<Statistic id: 2, value: #<Goals:0x1911ddc @goals_against=3>, created_at: "2008-04-17 13:22:10", updated_at: "2008-04-17 13:22:10">>> stat.value.goals_against=> 3 I didn''t have any problems along the way. Other than using simpler models/classes, nothing jumps out at me as to what you might have done that''s causing your problem. Here''s the source code. class Statistic < ActiveRecord::Base serialize :value end class Goals attr_accessor :goals_against def initialize(goals_against) @goals_against = goals_against end end Here''s the generated schema from db/schema.rb. ActiveRecord::Schema.define(:version => 1) do create_table "statistics", :force => true do |t| t.text "value" t.datetime "created_at" t.datetime "updated_at" end end Let me know how it goes and if there''s anything more I can do. Regards, Craig --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Tarscher
2008-Apr-18 11:30 UTC
Re: undefined method `goals_against'' for #<YAML::Object:0x5584864>
Many thanks for the help.
I have found some strange behavior:
I use understanding code to first insert a then read a Goals object
from the database
stat = Statistic.new
stat.event_id = 1
stat.statistic_definition_id = 1
stat.value = Goals.new({1 => 1, 2 => 2}, 1)
stat.save
@statistics = @event.statistics.find(:all, :include
=> :statistic_definition)
goals_a = @statistics.first.value.goals_against
When I use above code the deserialization works as it should.
The next time, when I only get the Goals object out of the database
(and not insert it first), deserialization fails. It seems that I have
to insert and read the object in the same request otherwise
deserialization fails.
This sounds very weird and I have no idea what causes this.
Regards,
Stijn
On Apr 17, 7:35 pm, "Craig Demyanovich"
<cdemyanov...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> I tried something a bit simpler just to see if it would work.
Here''s what I
> did.
>
> * create a new rails app (rails blah)
> * create the databases (rake db:create:all)
> * generate a Statistic model with a value column of type text
> (script/generate model statistic value:text)
> * run migrations (rake db:migrate)
> * create a non-ActiveRecord class named Goals with one attributed named
> goals_against
> * run the Rails console (script/console) and do the following:
>
> >> Statistic.create! :value => Goals.new(3)
>
> => #<Statistic id: 2, value: #<Goals:0x1928960
@goals_against=3>,
> created_at: "2008-04-17 13:22:10", updated_at: "2008-04-17
13:22:10">>> stat = Statistic.find :first
>
> => #<Statistic id: 2, value: #<Goals:0x1911ddc
@goals_against=3>,
> created_at: "2008-04-17 13:22:10", updated_at: "2008-04-17
13:22:10">>> stat.value.goals_against
>
> => 3
>
> I didn''t have any problems along the way. Other than using simpler
> models/classes, nothing jumps out at me as to what you might have done
> that''s causing your problem.
>
> Here''s the source code.
>
> class Statistic < ActiveRecord::Base
> serialize :value
> end
>
> class Goals
> attr_accessor :goals_against
>
> def initialize(goals_against)
> @goals_against = goals_against
> end
> end
>
> Here''s the generated schema from db/schema.rb.
>
> ActiveRecord::Schema.define(:version => 1) do
>
> create_table "statistics", :force => true do |t|
> t.text "value"
> t.datetime "created_at"
> t.datetime "updated_at"
> end
>
> end
>
> Let me know how it goes and if there''s anything more I can do.
>
> Regards,
> Craig
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Tarscher
2008-Apr-18 13:07 UTC
Re: undefined method `goals_against'' for #<YAML::Object:0x5584864>
I found out something more. When I do:
Goals.new({1 => 1, 2 => 2}, 1)
@statistics = @event.statistics.find(:all, :include
=> :statistic_definition)
goals_a = @statistics.first.value.goals_against
it works.
@statistics = @event.statistics.find(:all, :include
=> :statistic_definition)
goals_a = @statistics.first.value.goals_against
I get undefined method `goals_against'' for
#<YAML::Object:0x539a954>
Can it be that the deserializer doesn''t know the Goals object somehow
by default? I put the Goals class file in my Lib directory.
Regards,
Stijn
When I do
it also works. I thus just have to use the Goals class
On Apr 18, 1:30 pm, Tarscher
<tarsc...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
wrote:> Many thanks for the help.
>
> I have found some strange behavior:
>
> I use understanding code to first insert a then read a Goals object
> from the database
> stat = Statistic.new
> stat.event_id = 1
> stat.statistic_definition_id = 1
> stat.value = Goals.new({1 => 1, 2 => 2}, 1)
> stat.save
>
> @statistics = @event.statistics.find(:all, :include
> => :statistic_definition)
> goals_a =
-I0Ix8485ByAhm4WSr3RupOPMIqm0nMIOvv+FofpDrrg@public.gmane.org_against
>
> When I use above code the deserialization works as it should.
>
> The next time, when I only get the Goals object out of the database
> (and not insert it first), deserialization fails. It seems that I have
> to insert and read the object in the same request otherwise
> deserialization fails.
>
> This sounds very weird and I have no idea what causes this.
>
> Regards,
> Stijn
>
> On Apr 17, 7:35 pm, "Craig Demyanovich"
<cdemyanov...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> wrote:
>
> > I tried something a bit simpler just to see if it would work.
Here''s what I
> > did.
>
> > * create a new rails app (rails blah)
> > * create the databases (rake db:create:all)
> > * generate a Statistic model with a value column of type text
> > (script/generate model statistic value:text)
> > * run migrations (rake db:migrate)
> > * create a non-ActiveRecord class named Goals with one attributed
named
> > goals_against
> > * run the Rails console (script/console) and do the following:
>
> > >> Statistic.create! :value => Goals.new(3)
>
> > => #<Statistic id: 2, value: #<Goals:0x1928960
@goals_against=3>,
> > created_at: "2008-04-17 13:22:10", updated_at:
"2008-04-17 13:22:10">>> stat = Statistic.find :first
>
> > => #<Statistic id: 2, value: #<Goals:0x1911ddc
@goals_against=3>,
> > created_at: "2008-04-17 13:22:10", updated_at:
"2008-04-17 13:22:10">>> stat.value.goals_against
>
> > => 3
>
> > I didn''t have any problems along the way. Other than using
simpler
> > models/classes, nothing jumps out at me as to what you might have done
> > that''s causing your problem.
>
> > Here''s the source code.
>
> > class Statistic < ActiveRecord::Base
> > serialize :value
> > end
>
> > class Goals
> > attr_accessor :goals_against
>
> > def initialize(goals_against)
> > @goals_against = goals_against
> > end
> > end
>
> > Here''s the generated schema from db/schema.rb.
>
> > ActiveRecord::Schema.define(:version => 1) do
>
> > create_table "statistics", :force => true do |t|
> > t.text "value"
> > t.datetime "created_at"
> > t.datetime "updated_at"
> > end
>
> > end
>
> > Let me know how it goes and if there''s anything more I can
do.
>
> > Regards,
> > Craig
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Craig Demyanovich
2008-Apr-19 13:00 UTC
Re: undefined method `goals_against'' for #<YAML::Object:0x5584864>
In the example that I created, I put the Goals class in app/models even though it''s not an ActiveRecord model. Does putting your Goals class in app/models make a difference? Regards, Craig --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Tarscher
2008-Apr-22 15:36 UTC
Re: undefined method `goals_against'' for #<YAML::Object:0x5584864>
Hi Craig, Putting it in the apps/model solves the problem. I though tough you should put all your classes in the lib dir. regards, Stijn On Apr 19, 3:00 pm, "Craig Demyanovich" <cdemyanov...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> In the example that I created, I put the Goals class in app/models even > though it''s not an ActiveRecord model. Does putting your Goals class in > app/models make a difference? > > Regards, > Craig--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Craig Demyanovich
2008-Apr-22 23:40 UTC
Re: undefined method `goals_against'' for #<YAML::Object:0x5584864>
I''ve used the lib dir only once for a very simple rake task, but my impression is that code in the lib dir should be available to the rest of the app. If I have a chance to do a little learning, I''ll report back. Craig --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---