Coder Social home page Coder Social logo

`.each` called twice about rabl HOT 13 CLOSED

nesquena avatar nesquena commented on August 19, 2024
`.each` called twice

from rabl.

Comments (13)

nesquena avatar nesquena commented on August 19, 2024

Thanks for the heads up, I will definitely check out how to fix this soon.

from rabl.

nesquena avatar nesquena commented on August 19, 2024

I think this has been fixed, can you confirm if this still happens?

from rabl.

nesquena avatar nesquena commented on August 19, 2024

Closing, re-open if you notice this in last version.

from rabl.

jacquescrocker avatar jacquescrocker commented on August 19, 2024

just switched my project's bundle to the git version. the kicker now gets executed 3 times :-)

from rabl.

nesquena avatar nesquena commented on August 19, 2024

That is awesomely bad. Can you help me with a simple test sample? I have two AR models: Users and Address and User has_one address. I created a bunch of users in AR and then did:

get "/" do
  @users = User.includes(:address).where('name != ?', 'frank')
  render "users"
end

with users template:

object @users

attribute :id, :name, :age

child :address do
  attribute :street, :city
end

code :foo do |m|
  m.name + "!"
end

and the logs show this:

DEBUG - [14/Apr/2011 12:53:18] "User Load (0.8ms)  SELECT "users".* FROM "users" WHERE (name != 'frank')"
DEBUG - [14/Apr/2011 12:53:18] "Address Load (0.4ms)  SELECT "addresses".* FROM "addresses" WHERE ("addresses".user_id IN (1,2,3))"

I think I am doing the test wrong. Do you think this is criteria objects in mongoid specific? I do check respond_to? on the object once or twice, I wonder if even a respond_to? kicks the object.

from rabl.

jacquescrocker avatar jacquescrocker commented on August 19, 2024

no prob, here's a simple sample project that replicates the bug: http://cl.ly/231i0N0k2M1X0J0j3918

from rabl.

nesquena avatar nesquena commented on August 19, 2024

Also, I pushed to git version a new little hack that should fix it when you use the collection declaration instead of object.

collection @users

instead of object will force the passed in object to a collection with to_a. I would prefer a more elegant solution though such that using the 'object' directly still works.

from rabl.

nesquena avatar nesquena commented on August 19, 2024

Thanks will try to come up with a better solution based on that test project. Can you confirm if on latest git rev that using collection solves it at least?

from rabl.

jacquescrocker avatar jacquescrocker commented on August 19, 2024

cool, sounds good. i have a breakpoint in the rabl src code, tracing through it now. i'll let you know if i come up with anything

from rabl.

nesquena avatar nesquena commented on August 19, 2024

Awesome thanks, would love to know the root cause of the three invocations.

from rabl.

jacquescrocker avatar jacquescrocker commented on August 19, 2024

hmm, it might just be a mongoid issue

e @_data.respond_to?(:each_pair)
MONGODB rabl['users'].find({})

from rabl.

jacquescrocker avatar jacquescrocker commented on August 19, 2024

ok, looks like this is just a mongoid issue. it's executing a query whenever respond_to? is called on the criteria object. the solution you added of doing a .to_a on the collection @users is great and should solve my issues in the meantime. thanks!

from rabl.

nesquena avatar nesquena commented on August 19, 2024

Yeah kicking on respond_to? is kind of sloppy, tempted to report the issue for mongoid. AR and DM act as you'd expect (no kick). Cleaned up the implementation of collection, I don't think it's that bad of an approach to fixing this for now. I kind of think it is a bit cleaner to declare the collection explicitly anyways. Thanks for your help.

from rabl.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.