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

Reply via email to