I'm trying to integrate this now. How would that actually work, with the nested IMs?
This is the source of that middleware: https://github.com/datamapper/dm-rails/blob/master/lib/dm-rails/middleware/identity_map.rb I don't see how it processes that :external argument, but maybe I'm misunderstanding how "use" works. On 02/07/2011, at 13:46, kristian wrote: > sorry for the late replies of my side - bad setup of the group for > me. > > IdentityMaps is wrong - my mistake. > > nesting happens if you stack two or more of the IM over each other. > > if IM works is a matter of trust ;-) as Chris said they are not > essentlial but nice to have. > > - Kristian > > On Jul 1, 7:41 pm, Bence <[email protected]> wrote: >> I tested Kristian's two lines, but it broke the ApplicationController >> with "uninitialized constant Rails::DataMapper::IdentityMaps" error. >> Maybe I'm doing something wrong... >> >> The standard "user Rails::DataMapper::Middleware:IdentityMap" and >> enforcing the :external repo through self.respository in the model >> works - I can access the model from the controller. I'm not certain, >> though, whether the IM is used in this case? >> >> Thanks again for your tips, guys! You helped me get over a frustrating >> bump! >> >> On Jul 1, 3:07 pm, Chris Corbyn <[email protected]> wrote: >> >> >> >> >> >> >> >>> They go inside ApplicationController, right inside the class body. >> >>> class ApplicationController < ActionController::Base >>> use 'Rails::DataMapper::IdentityMaps', :external >>> use 'Rails::DataMapper::IdentityMaps' >> >>> ... rest of controller here ... >>> end >> >>> They're not essential, but that's what provides your identity map, so that >>> when you fetch the same resource multiple times, you don't query the >>> database repeatedly, and when that resource is changed, everybody sees the >>> changes. >> >>> I have "use Rails::DataMapper::Middleware::IdentityMap" (singular) in my >>> controller... I assume there is a pluralized version for when you're using >>> multiple identity maps. This is just what the dm-rails template configures >>> though. >> >>> On 01/07/2011, at 22:59, Bence wrote: >> >>>> Thanks, Kristian! >> >>>> I meant the >>>> use 'Rails::DataMapper::IdentityMaps', :external >>>> use 'Rails::DataMapper::IdentityMaps' >>>> lines you wrote. Where do the go? They don't seem to work in >>>> ApplicationController just like that. I'm not certain how to set up >>>> nested identity maps, and have not found examples... >> >>>> /B >> >>>> On Jul 1, 5:30 am, kristian <[email protected]> wrote: >>>>> yes, the method I was talking about was in model. >> >>>>> now you are using no IdentiyMaps for the external repo and you can add >>>>> it by adding >>>>> "use Rails::..." in the ApplicationController. but make sure the order >>>>> is correct or use these #repository trick for ALL models. >> >>>>> - Kristian >> >>>>> On Jun 30, 3:56 pm, Bence <[email protected]> wrote: >> >>>>>> Thanks! >> >>>>>> I overrode the #repository as you described, and it seems to have done >>>>>> the trick. I did this in the model - I guess this is what you meant by >>>>>> "binding in a static way"? >> >>>>>> Where do the "use 'Rails::...'" lines go? Are they required? I'm not >>>>>> using them right now at all, and the repository seems to be the right >>>>>> one on my external model. >> >>>>>> //B >> >>>>>> On Jun 29, 6:56 am, kristian <[email protected]> wrote: >> >>>>>>> what I do on almost all my projects (datamapper makes it to easy to >>>>>>> use morethen one repo) is that I am using nested IdentityMaps one for >>>>>>> the default and one for the :external repository >> >>>>>>> use 'Rails::DataMapper::IdentityMaps', :external >>>>>>> use 'Rails::DataMapper::IdentityMaps' >> >>>>>>> in order to "dispatch" the models onto the right repository I am >>>>>>> overwrite this method >> >>>>>>> def self.repository(name = nil, &block) >>>>>>> super(:external, &block) >>>>>>> end >> >>>>>>> so basically I bind the model to the :external repository in static >>>>>>> way. the same thing I do for transactions ! >> >>>>>>> maybe that helps. >> >>>>>>> - Kristian >> >>>>>>> On Jun 29, 6:41 am, Chris Corbyn <[email protected]> wrote: >> >>>>>>>> Note that you can disable that "everything is wrapped in a repository >>>>>>>> block" behaviour by removing this line from ApplicationController: >> >>>>>>>> use Rails::DataMapper::Middleware::IdentityMap >> >>>>>>>> You won't have an identity-map per-request if you do this though. >> >>>>>>>> On 28/06/2011, at 21:48, Bence wrote: >> >>>>>>>>> Hi, >> >>>>>>>>> I'm new to DataMapper and run into a confusing issue to which I didn't >>>>>>>>> find any answers. >> >>>>>>>>> I have two repositories (:default and :external). >>>>>>>>> Model "ext_model" is persisted in :external by setting the >>>>>>>>> default_repository_name in the model. The model works: the unit tests >>>>>>>>> are green and I can manipulate the model in the console without >>>>>>>>> problems. >>>>>>>>> When I run the unit tests on controller ext_model_controller#index, it >>>>>>>>> is green: retrieves all from ext_model, as it should. >>>>>>>>> But when I launch the webserver and browse to /ext_model_controller/ >>>>>>>>> index, I get an error message, and I see that it is looking for >>>>>>>>> ext_model in the :default repository (instead of :external). >>>>>>>>> Shouldn't both the console and the server retrieve the model the same >>>>>>>>> way? Am I missing something? How do I set explicitly the repository on >>>>>>>>> the model so that the webserver uses that? >>>>>>>>> If I wrap the code inside ext_model_controller#index action in >>>>>>>>> DataMapper.repository(:external) {...} then it works, but shouldn't >>>>>>>>> this be unnecessary since I already explicitly assigned a repository >>>>>>>>> to the model? >> >>>>>>>>> Thanks in advance! >> >>>>>>>>> //Bence >> >>>>>>>>> Rails 3.0.9, dm 1.1.0 >> >>>>>>>>> -- >>>>>>>>> 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 >>>>>>>>> athttp://groups.google.com/group/datamapper?hl=en. >> >>>> -- >>>> 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 >>>> athttp://groups.google.com/group/datamapper?hl=en. > > -- > 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. > -- 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.
