Balint,
You *don't* need to specify *any* action code at all! From your given
example, if you have
# inside config/router.rb
Merb::Router.prepare do
resources :recommendations do
resources :users do
resources :recommendations
end
end
# inside app/controllers/application.rb
class Application < Merb::Controller
extend Merb::ResourceController::Mixin::ClassMethods
end
# inside app/controllers/recommendations.rb
class Recommendations < Application
controlling :recommendations do |r|
r.belongs_to :user
end
end
This should do all you need !?! Let me know if it doesn't or if you
mean something different!
cheers
snusnu
On Thu, Dec 4, 2008 at 8:02 AM, baaz <[EMAIL PROTECTED]> wrote:
>
> Hi Martin,
>
> I managed to make it work with a little trick. Instead of adding a
> line into the dependencies.rb I inserted a require
> "merb_resource_controller" into init.rb. I am sure this is not clean
> but at least merb starts.
>
> So I tried to rewrite the index action of my Recommendations
> controller that had looked like this:
>
> def index
> find_opts = {}
> find_opts[:user_id] = params[:user_id] unless params
> [:user_id].nil?
> @recommendations = Recommendation.all(find_opts)
> display @recommendations
> end
>
> I expected the code to "magically" (thanks to your plugin) know what
> @recommendations should be set to based on the URL. So it would set it
> to all recommendations for "/recommendations" (1) and to the
> recommendations of the user for "/users/1/recommendations" (2). So I
> wrote that:
>
> def index
> @recommendations = Recommendation.all
> display @recommendations
> end
>
> But that loaded all the recommendations in both of the above cases. I
> also tried the following method since if I understood you correctly an
> instance variable @user is set to the actual user in the (2) case:
>
> def index
> @recommendations = @user ? @user.recommendations :
> Recommendation.all
> display @recommendations
> end
>
> This did not work and after a very short debugging session I realized
> that the @user variable is nil in both cases. (I included the
> "controlling" calls in my controllers as you described). Did I
> understand you correctly? Is that how it should work?
>
> Here are the versions I am running (as you very well suggested on your
> blog):
>
> Darwin balint-erdis-macbook.local 9.5.0 Darwin Kernel Version 9.5.0
> ruby 1.8.6 (2008-03-03 patchlevel 114)
> mysql Ver 14.12 Distrib 5.0.45
> I am using 1.0.1 of all merb gems and 0.9.7 of all dm gems.
>
> Once again, thank you for your help!
> Balint
>
> On Dec 3, 7:18 pm, "Martin Gamsjaeger" <[EMAIL PROTECTED]> wrote:
>> Hmm,
>>
>> I must admit I haven't yet tried it inside the local gems dir, I only
>> have it installed systemwide so far.
>>
>> One thing you could try is:
>>
>> inside irb:
>> require "rubygems"
>> require "merb_resource_controller"
>>
>> obviously this will only affect your systemwide installation and
>> doesn't take into account the bundled gems,
>> but it should show you a more precise error message! actually i think
>> that once you have it working from systemwide gems, it should also
>> work the bundled way.
>>
>> Out of interest, which version of merb/dm do you use?
>>
>> cheers
>> snusnu
>>
>> On Wed, Dec 3, 2008 at 7:13 PM, baaz <[EMAIL PROTECTED]> wrote:
>>
>> > My bad, thank you, I fixed that in the dependencies.rb file.
>>
>> > However it does not change a lot. I installed the gem both into the
>> > merb app's gems folder (first) and then to the default gems
>> > repository. I always get the same thing:
>>
>> > FATAL: The gem merb_resource_controller (>= 0, runtime), [] was not
>> > found
>> > FATAL: The file merb_resource_controller was not found
>>
>> > Do I have to require it somewhere else maybe?
>>
>> > Balint
>>
>> > On Dec 3, 6:50 pm, "Martin Gamsjaeger" <[EMAIL PROTECTED]> wrote:
>> >> Balint,
>>
>> >> The gem is named "merb_resource_controller" !
>>
>> >> So you should have:
>>
>> >> dependency "merb_resource_controller"
>>
>> >> instead of:
>>
>> >> dependency "merb_resourceful_controller"
>>
>> >> Let me know if this solves all your issues!
>>
>> >> cheers
>> >> snusnu
>>
>> >> On Wed, Dec 3, 2008 at 5:15 PM, baaz <[EMAIL PROTECTED]> wrote:
>>
>> >> > Hey Martin,
>>
>> >> > That sounds great! I would love to give it a try but I could not
>> >> > figure out how to install a plugin for Merb. I guess from this post
>> >> > (http://blog.antarestrader.com/?p=70) that it might not happen so
>> >> > smoothly. Standing in the root directory of my Merb app I did:
>>
>> >> > gem install snusnu-merb_resource_controller -i ./gems/
>>
>> >> > which installed your gem and all its dependencies into the 'gems'
>> >> > directory. I added the following line to dependencies.rb below all the
>> >> > others:
>>
>> >> > dependency "merb_resourceful_controller"
>>
>> >> > After that, when I started merb I received the following error:
>>
>> >> > FATAL: The gem merb_resourceful_controller (>= 0, runtime), [] was not
>> >> > found
>>
>> >> > (I tried the same with "snusnu-merb_resourceful_controller" to no
>> >> > avail.)
>>
>> >> > I also read Yehuda's guide (http://yehudakatz.com/2007/09/19/merb-
>> >> > plugins-oh-yeah-theyre-pretty-frickin-cool-too/) -somewhat old- about
>> >> > how to install a Merb-plugin and that seemed to be consistent with
>> >> > what I do but I am surely missing soemthing.
>>
>> >> > If that's an easy one, could you point me to what I am doing wrong?
>>
>> >> > Thanks a lot!
>> >> > Balint
>>
>> >> > On Dec 3, 2:34 am, "Martin Gamsjaeger" <[EMAIL PROTECTED]> wrote:
>> >> >> Hey Balint,
>>
>> >> >> Unless I misunderstand something
>> >> >> important,http://github.com/snusnu/merb_resource_controller/tree/mastermaywell
>> >> >> be an option?
>>
>> >> >> It basically knows how to CRUD under different nesting strategies
>> >> >> (i.e. /recommendations vs. /users/1/recommendations).
>>
>> >> >> It will always load your resource properly scoped (i.e.
>> >> >> Recommendation.all vs. @user.recommendations), without any before
>> >> >> filter abusing.
>>
>> >> >> It will also setup all the instance variables you would expect to find
>> >> >> for use in your views (i.e. @recommendations vs. @user AND
>> >> >> @recommendations)
>>
>> >> >> You would use it like so:
>>
>> >> >> class Application < Merb::Controller
>> >> >> extend Merb::ResourceController::Mixin::ClassMethods
>> >> >> end
>>
>> >> >> class Users < Application
>> >> >> controlling :users
>> >> >> end
>>
>> >> >> class Recommendations < Application
>> >> >> controlling :recommendations do |r|
>> >> >> r.belongs_to :user
>> >> >> end
>> >> >> end
>>
>> >> >> Maybe this helps? Let me know if anything doesn't work the way you
>> >> >> expect, if you try it out. Also don't be afraid to dive into the code,
>> >> >> read it (and the specs), fork it, throw it away, whatever ... It
>> >> >> currently does a nice job for me! Let's make it better by using it
>> >> >> more :-)
>>
>> >> >> That said, I'm all for Justin's suggestions to separate the
>> >> >> controllers when needed! If the only thing is avoiding nasty
>> >> >> conditionals for scoping queries and redirecting though, this may be a
>> >> >> reasonably easy alternative ...
>>
>> >> >> cheers
>> >> >> snusnu
>>
>> >> >> On Tue, Dec 2, 2008 at 8:24 PM, Justin Reagor <[EMAIL PROTECTED]>
>> >> >> wrote:
>> >> >> > On Dec 2, 2008, at 1:47 PM, baaz wrote:
>>
>> >> >> > Clearly, the data I should show in these two cases is different, so
>> >> >> > the controller code should handle this somehow.
>> >> >> > The "create" action in the controller is even messier, redirecting to
>> >> >> > different URLs depending on where we came from, etc. These dual-duty
>> >> >> > controllers will be bloated and not nice.
>>
>> >> >> > I think you nailed it on the head yourself, sounds like two different
>> >> >> > resources to me. Regardless of what the data model looks like on the
>> >> >> > back
>> >> >> > end, the exposed resources through the public API are probably going
>> >> >> > to need
>> >> >> > separate controllers.
>> >> >> > Unless I'm misinterpreting what your trying to achieve here.
>> >> >> > :: Justin Reagor
>> >> >> > :: [EMAIL PROTECTED]
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"merb" 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/merb?hl=en
-~----------~----~----~----~------~----~------~--~---