Forum: Ruby on Rails AWS and array of Model

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
C19a93a1264066e192ba91b7e44b9cfd?d=identicon&s=25 Háber János (Guest)
on 2006-01-06 19:48
(Received via mailing list)
Hi!

I try to use a layered webservice and I want to get back an array of
users;

In the API I use:
    api_method :listUsers,:returns=>[[User]]

in the service:
    def listUsers
        User.find(:all)
    end

Result in soap mode:

Don't know how to cast TrueClass to Object


Result in XML-RPC mode:

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occured while evaluating nil.collect


It's work on another machine. (Here is windows)
I tried to create another ampty project with Only this model, and only
one controller.

In controller used this code (the model is the default generated):
class UserAdminAPI < ActionWebService::API::Base
    api_method :listUsers,:returns=>[[User]]
end

class UserAdminService < ActionWebService::Base
    web_service_api UserAdminAPI

    def listUsers
        User.find(:all)
    end
end

class AdminController < ApplicationController
  wsdl_service_name 'Admin'
  web_service_dispatching_mode :delegated
  web_service_scaffold :invoke
  web_service(:user) { UserAdminService.new }
end

What's the problem? (If I change the return variable to :string and I in
the implementation I use YAML.dump User.find(:all). It's get back the
value.

the flul log: http://www.rafb.net/paste/results/PNmYct37.html


Cow
34791e1d8c4def65f9b93294638a7e04?d=identicon&s=25 Joerg Diekmann (joergd)
on 2006-01-07 17:57
Yeah, I have a very similar problem. I want my webservice to return say
a Person object, but when I invoke the method through SOAP I get "Don't
know how to cast FalseClass to Object", and through XML-RPC I get a
whiney NULL error.

I have used the exact example from the Agile Rails book ... have you
managed to solve your problem yet?

Joerg

P.S. It all works fine if my methods return integers or strings.


Háber János wrote:
> Hi!
>
> I try to use a layered webservice and I want to get back an array of
> users;
>
> In the API I use:
>     api_method :listUsers,:returns=>[[User]]
>
> in the service:
>     def listUsers
>         User.find(:all)
>     end
>
> Result in soap mode:
>
> Don't know how to cast TrueClass to Object
>
>
> Result in XML-RPC mode:
>
> You have a nil object when you didn't expect it!
> You might have expected an instance of Array.
> The error occured while evaluating nil.collect
>
>
> It's work on another machine. (Here is windows)
> I tried to create another ampty project with Only this model, and only
> one controller.
>
> In controller used this code (the model is the default generated):
> class UserAdminAPI < ActionWebService::API::Base
>     api_method :listUsers,:returns=>[[User]]
> end
>
> class UserAdminService < ActionWebService::Base
>     web_service_api UserAdminAPI
>
>     def listUsers
>         User.find(:all)
>     end
> end
>
> class AdminController < ApplicationController
>   wsdl_service_name 'Admin'
>   web_service_dispatching_mode :delegated
>   web_service_scaffold :invoke
>   web_service(:user) { UserAdminService.new }
> end
>
> What's the problem? (If I change the return variable to :string and I in
> the implementation I use YAML.dump User.find(:all). It's get back the
> value.
>
> the flul log: http://www.rafb.net/paste/results/PNmYct37.html
>
>
> Cow
C19a93a1264066e192ba91b7e44b9cfd?d=identicon&s=25 Háber János (Guest)
on 2006-01-07 20:40
(Received via mailing list)
Hi!

I think you are use postgresql or other database which have real boolean
type (mysql boolean type is an alias to int(1)). And the Webservice
can't cast this type to primitive.

Cow

Joerg Diekmann írta:
34791e1d8c4def65f9b93294638a7e04?d=identicon&s=25 Joerg Diekmann (joergd)
on 2006-01-07 21:40
I am using MySql, and don't have any booleans either ... but I'll see if
it can have anything to do with my table columns. But at the moment
(well, the past few days) it looks like a bug to me in Rails.
34791e1d8c4def65f9b93294638a7e04?d=identicon&s=25 Joerg Diekmann (joergd)
on 2006-01-07 22:04
Right. If I return a User object from my AWS, everything is cool when I
use XML-RPC (SOAP gives me an error: Cannot map User to SOAP/OM.).

However, if I return a Brand object from my AWS, I get the errors
mentioned in the first email of this thread.

I can't see a difference though in these tables that would cause this
differing behaviour. I have added a tinyint(1) and a text field to User,
and it still works with those fields.

Perhaps I am using field names that I shouldn't?


CREATE TABLE `users` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `type` varchar(20) default NULL,
  `username` varchar(50) NOT NULL default '',
  `name` varchar(50) NOT NULL default '',
  `parent_id` int(11) default NULL,
  `email` varchar(100) NOT NULL default '',
  `updated_on` datetime default NULL,
  `created_on` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


CREATE TABLE `brands` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `name` varchar(100) NOT NULL default '',
  `abbreviation` varchar(11) NOT NULL default '',
  `description` text NOT NULL,
  `image` varchar(100) default NULL,
  `image_timestamp` datetime default NULL,
  `position` int(11) default NULL,
  `deleted` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
C19a93a1264066e192ba91b7e44b9cfd?d=identicon&s=25 Háber János (Guest)
on 2006-01-07 22:49
(Received via mailing list)
Hi!

I think the deleted is the problem. Rails automatically convert the
"deleted" field to boolean. because WS can't convert boolean to Object
so you can get the TrueClass can't convert error.
http://wiki.rubyonrails.com/rails/pages/HowtoUseBo...

So the Rails is buggy...

Cow

Joerg Diekmann írta:
34791e1d8c4def65f9b93294638a7e04?d=identicon&s=25 Joerg Diekmann (joergd)
on 2006-01-08 17:01
Yeah that was it. Thanks.
This topic is locked and can not be replied to.