1. Install
./script/plugin install git://github.com/activescaffold/active_scaffold.git -r rails-2.3
Rails 2.3.x needs the plugin render_component for nested scaffolds
./script/plugin install git://github.com/ewildgoose/render_component.git -r rails-2.3
Getting Started : http://wiki.github.com/activescaffold/active_scaffold/getting-started
2. Configuration
1) Model
Security
On your model object you may define methods (none of which accept any arguments) in any of four formats, depending on your need for granularity.
The formats are:
* #{column_name}_authorized_for_#{crud_type}?
* #{column_name}_authorized?
* authorized_for_#{crud_type}?
* authorized_for_#{action_name}?
http://wiki.github.com/activescaffold/active_scaffold/security
eg: Company
def authorized_for_delete?
current_user.is_admin? || Role.is_company_admin(current_user)
end
def authorized_for_update?
current_user.is_admin? || Role.is_company_admin(current_user)
end
def authorized_for_create?
current_user.is_admin? || Role.is_company_admin(current_user)
end
Task
def original_hours_authorized_for_update?
current_user.is_admin? || Role.is_company_admin(current_user)
end
named_scope
When you use beginning_of_chain method on controller, you can use model named_scope to limit the collection.
Tip: ”:joins” (ActiveRecord readonly), ”:include”
2) Controller
DataGrid
config.columns = [...]
list.columns.exclude :attribute1, :attribute2
update.columns.exclude :attribute1, :attribute2
create.columns.exclude ::attribute1, :attribute2
show.columns.exclude ::attribute1, :attribute2
eg: stories_controller.rb
active_scaffold :story do |config|
config.columns = [:title, :description, :idealdays, :priority, :state, :iteration, :tasks, :user, :comments, :project, :labels]
list.columns.exclude :comments, :tasks
update.columns.exclude :comments, :tasks, :project, :labels
create.columns.exclude :comments, :tasks, :project
show.columns.exclude :comments, :tasks
columns[:user].label = "Assign to User"
columns[:idealdays].label = "Ideal Days"
config.columns[:user].actions_for_association_links = [:show]
config.columns[:iteration].actions_for_association_links = [:show]
config.columns[:project].actions_for_association_links = [:show]
config.nested.add_link("Tasks", [:tasks])
config.nested.add_link("Comments", [:comments])
config.columns[:state].form_ui = :select
config.columns[:state].options = {:options => ["Please estimate ideal days"].map(&:to_sym)}
config.columns[:user].form_ui = :select
config.columns[:iteration].form_ui = :select
config.columns[:description].form_ui = :text_editor
config.columns[:labels].form_ui = :select
config.columns[:priority].form_ui = :select
config.columns[:priority].options = {:include_blank => "none", :options => 1..5}
config.subform.layout = :vertical
config.list.empty_field_text = "none"
end
Form
config.columns[:field_name].form_ui # value :boolean, :calendar)date_select, :checkbox, :country, :select....
http://wiki.github.com/activescaffold/active_scaffold/api-column
Labels
config.columns[:field_name].label = "Some text"
Collection Condition
conditions_for_collection, beginning_of_chain(use named_scope)
http://wiki.github.com/activescaffold/active_scaffold/api-list
eg: stories_controller.rb
def beginning_of_chain
if !is_admin
super.for_common_user(current_user.projects)
elsif Role.is_company_admin(current_user)
super.for_company_admin(current_user.company)
else
super
end
end
#{before,after}_#{create,update}_save
eg: stories_controller.rb
def before_create_save(record)
record.project = @parent unless @parent.nil?
end
Security
#{action_name}_authorized?
http://wiki.github.com/activescaffold/active_scaffold/security
eg: users_controller.rb
def add_existing_authorized?
false
end
3) Helper
Form Association Options(exclude: edit)
When you create a task_session, you want to limit the users with your company.
options_for_association_conditions(association)
eg: users_helper.rb
def options_for_association_conditions(association)
if association.name == :users
['company_id = ?', current_user.company.id] unless current_user.is_admin?
elsif association.name == :roles
['roles.id != ?', Role.find_by_name(Role::ROLE_ADMINISTRATOR).id] unless current_user.is_admin?
else
super
end
end
http://wiki.github.com/activescaffold/active_scaffold/custom-association-options
Field Overrides
#{column_name}_column(record)
eg: stories_helper.rb
def labels_column(record)
temp = record.labels.inject([]){|result, label| label.user == current_user ? result << h(label.name) : result }
if temp.any?
temp.join(",")
else
# This way there's something to turn into a link if there are no roles associated with this record yet.
active_scaffold_config.list.empty_field_text
end
end
http://wiki.github.com/activescaffold/active_scaffold/field-overrides
Form Overrides
http://wiki.github.com/activescaffold/active_scaffold/form-overrides
4) View
Template Overrides
Rendering your template overrides will wrap in this order:
1. Wrapping Template
2. ActiveScaffold Global Template Overrideapp/views/active_scaffold_overrides/template.html.erb
3. ActiveScaffold Frontendvendor/plugins/active_scaffold/frontends/default/views/template.html.erb
http://wiki.github.com/activescaffold/active_scaffold/template-overrides
3. Tips
ID (How to get id ? Nested page)
session_index = "as:#{params[:eid]}"
session[session_index][:constraints].values.to_s.to_i
Frequency Template Override
_list_actions.html : DataGrid Actions
_list_header.html : DataGrid Header Actions(Create, Search)
_list_column_headings.html : DataGrid Sort Action
_add_existing_form.html : many-to-many, add link
config.nested.shallow_delete : delete many-to-many link
true or false(default)
config.list.empty_field_text(default:”-”) : display text if field is nil
you can use "none" or other text.