Hello,
I’m using the UserEngine in my Rails application, in casu Riki. In the
page to create a new book, the administrator can select the book
administrator for that book, or create a new one if it does not exists.
In that case I link_to /user/new, but in the normal case I get
redirected to /user/list, whereas I would like to be redirected back to
the /book/create page. I solved this in the following way:
-
I added at the top of my create.rhtml (or in the create action)
session[‘return-to’] = ‘/books/create’ -
And I changed the new action in the user controller to
if session['return-to'] redirect_to session['return-to'] else redirect_to :action => 'list' end
In that case I get redirected back to the create book page. This is one
way, but I have the feeling that it is not the most elegant. I could of
course copy the complete new action, but this goes against the DRY
principle, and against the reusability of Engines. In the end, I might
have copied all code inside my rails application. This follows a
discussion I had with Jay:
Another thing to think about: You want the engine to be easily
extensible without folks having to modify the actual engine files, or
cut-and-paste >huge swaths of code. So keeping subroutines short (and
thus keeping overrides granular) is even more important than it is in
“normal” code. >UserEngine does a good job of keeping the “core” code
under lib, but I still found I had to copy an entire action from
user_controller just to change >one string. I’m not sure I can think of
specific patterns to encourage for extensibility, but it’s something
that should be kept in mind.
Or there other ways to solve this, I mean, reusing engine code
efficiently?
By the way, I still have then another problem in this way. When the
administrator has already filled in some fields of the form, they get
lost when he gets back to the create page. I know this is probably more
a Rails question in general, but does anybody has some ideas on how to
keep the field data? My gutfeeling is that it is lost, unless I
integrate it all together, by integrating the new user partial into the
create form, and duplicating the user/new code.
How could this be rewritten, so the new action of the user controller
could be reused? Or is this not the purpose of Engines, and maybe more
of plug-ins, where Engines are meant to be more complete applications?
enjoy!
Bart