On 8/12/10 6:47 PM, William Ross wrote:
On 13 Aug 2010, at 00:35, Wes Gamble wrote:
I have reviewed the contents of
http://wiki.github.com/radiant/radiant/modifying-the-page-ui in depth.
I have extension that modifies the user model to be attached to
something called a program, and I've made the change in the DB, and
modified the user model in my extension code like so:
User && class User < ActiveRecord::Base
belongs_to :program
end
so that the association will be there.
Now, I would like to be able to display and edit program assignments
for a given user in the admin. UI.
In my extension's "activate" method, I added the following lines in
the hopes of customizing the UI:
admin.user.edit.form << 'edit_program'
admin.user.index.thead << 'program_header'
admin.user.index.tbody << 'program_cell'
thinking that the display of the user admin was super dynamic and it
would just figure out how to display the edit components based on
attribute type.
But when I try to look at the index view of users, I get:
"`program_header' default partial not found! `program_cell' default
partial not found!" as errors in the index display.
and
`edit_program' default partial not found! as an error in the edit
display.
**
After looking into it, though, I see the admin/users/edit and
admin/users/index views under the Radiant core are more or less
hard-coded at the column level, but the error messages imply that I
should be able to add a partial somewhere for my custom fields.
Questions:
What is the preferred way to customize at this level?
You're on the right lines, though I would normally use this kind of
idiom to get more control:
admin.users.edit.add :form, "edit_program", :after => "something"
and then you need to create the partial, which in this case would be
vendor/extensions/your_extension/app/views/admin/users/_edit_program.html.haml
I did this, and created a file in the correct place, and entered the
following in my "activate" method:
admin.users.edit.add :form, "edit_program", :after => "edit_roles"
My partial looks like this:
- form.edit_program do
%p
= f.label :program_id, t('program'), :class => "optional"
= f.select :program_id, Program.all.collect {|p| [p.name, p.id]}
and I get the classic
" |wrong number of arguments (0 for 1)|"
message when I try to render the form. This is because, AFAIK, the
partial hasn't been passed the "form" variable as a local.
How does the partial get rendered in the context of the existing form?
Thanks,
Wes