That was exactly what I was unaware of.

Documents can now be created by the form, but won't be shown. The js
console gives this error:

 Uncaught TypeError: Cannot read property 'id' of undefined

so I'm getting one step closer -- thank you very much Emmanuel.

The model now looks like:

    require 'dm-serializer'
    class Document

        include DataMapper::Resource
        include DataMapper::MassAssignmentSecurity

        property :id, Serial
        property :title, String
        property :body, String

        attr_accessible :body, :title

       #def to_json(options = {})
       #  super(options.merge(:only =>
[:id, :title, :created_at, :body]))
       #end

end

- that to_json method still appears to do nothing I can detect (when
uncommented)

- going to /#documents/1

   produces an interesting:

   NoMethodError (undefined method `call' for "1":String):


I'll keep poking at it, thanks again.

On May 3, 4:07 am, Emmanuel Gomez <[email protected]> wrote:
> The example in the blog post works because ActiveRecord mass
> assignment protection is in use, so every key from the params
> except :body and :title are ignored (attr_accessible :body, :title).
>
> You can include DataMapper::MassAssignmentSecurity from the dm-rails
> gem to get similar behavior.
>
> HTH,
> Emmanuel
>
> On May 2, 9:51 am, none1 <[email protected]> wrote:
>
> > The form is coming from a javascript template....so it isn't strictly
> > the usual rails form:
>
> > <form>
> >     <label for='title'>Title</label>
> >     <input name='title' type='text' />
>
> >     <label for='body'>Body</label>
> >     <textarea name='body'><%= model.get('body') %></textarea>
>
> >     <button><%= model.isNew() ? 'Create' : 'Save' %></button>
> > </form>
>
> > also everything worked fine for the activerecord version....the model
> > had some function:
>
> >  def to_json(options = {})
> >     super(options.merge(:only => [:id, :title, :created_at, :body]))
> >   end
>
> > that does nothing with the dm version (that I can tell or register
> > atm)...and it is not just the form.
>
> > Console created documents aren't rendered in the collection with
> > another type of error:
>
> > WITHOUT dm-serializer:
> > -------------------------------------
> > Processing by DocumentsController#index as JSON
> >   SQL (0.164ms)  SELECT "id", "title", "body" FROM "documents" ORDER
> > BY "id"
> > Completed   in 25ms
>
> > NoMethodError (undefined method `encode_json' for #<Document @id=1
> > @title="none" @body="asdfadfadsfasf">):
> >   app/controllers/documents_controller.rb:6:in `block (2 levels) in
> > index'
> >   app/controllers/documents_controller.rb:5:in `index'
>
> > WITH dm-serializer
> > ---------------------------
> > Started GET "/documents" for 127.0.0.1 at 2011-05-02 12:46:26 -0400
> >   Processing by DocumentsController#index as JSON
> >   SQL (0.124ms)  SELECT "id", "title", "body" FROM "documents" ORDER
> > BY "id"
> > Completed 200 OK in 5ms (Views: 4.2ms | Models: 0.124ms)
>
> > .....and nothing
>
> > There is something I need to be doing that I don't know I need to be
> > doing to get the json in tune with dm -- my thoughts right now. I'll
> > just reiterate that the only change I made was swapping out all the
> > activerecord related code for dm related code.
>
> > On May 2, 5:20 am, Piotr Solnica <[email protected]> wrote:
>
> > > Hi,
>
> > > You should put document's params under :document key so you pass
> > > params[:document] to #create method. What happens in your case is that
> > > you pass entire params hash to #create which also includes :action
> > > name (which is hidden in the logs, but it is there).
>
> > > Also if you're using #create! all hooks are bypassed which includes
> > > validations, you probably want to call #create instead.
>
> > > Hope this helps
>
> > > Cheers
>
> > > # solnic
>
> > > On May 1, 11:03 pm, none1 <[email protected]> wrote:
>
> > > > I'm working through a basic demo of a backbone.js (derived 
> > > > fromhttp://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by...).
> > > > All examples I've found work with Activerecord.
>
> > > > It is very basic, but doesn't work when I recreate it using DM. I'm
> > > > new to js, but from what I can see the js is working but I haven't set
> > > > DM and rails to talk properly with the json coming from the browser:
>
> > > > The controllers below:
>
> > > > class DocumentsController < ApplicationController
>
> > > >   def create
> > > >   21-->   document = Document.create! params
> > > >     render :json => document
> > > >   end
>
> > > > end
>
> > > > Submitting a post to create:
>
> > > >  Processing by DocumentsController#create as JSON
> > > >   Parameters: {"title"=>"asdfasdf", "body"=>"asdfadsfs"}
> > > > Completed   in 1ms
>
> > > > ArgumentError (The attribute 'action' is not accessible in Document):
> > > >   app/controllers/documents_controller.rb:21:in `create'
>
> > > >  If I create objects through the console, they don't get rendered
> > > > either and there is js errors indicating not being able to read the
> > > > response correctly.
>
> > > > I've found next to nothing about backbone/dm and I'm new to js/json.
> > > > I'd like to be able to move what I'm doing into more of an ajax
> > > > context, and found backbone.js to be something I can understand. The
> > > > post doesn't give anything I'm accustomed to from a regular form (e.g.
> > > > params[:document], but I haven't toyed with the form template itself
> > > > yet hmmmm). Do I need to work with dm-serializer, there is something I
> > > > need to do to the model, etc.?
>
> > > > example application here:
>
> > > > https://[email protected]/blueblank/dmbackbone-example.git
>
> > > > Any input appreciated. I'd like to be able to work this out and have
> > > > others be able to reference.

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en.

Reply via email to