Bonjour tout le monde,
J’aimerais bien pouvoir utiliser cet assistant :
http://wiki.rubyonrails.com/rails/pages/AssociationHelper
hélas, j’ai beau lire, relire et re-relire, je n’arrive Ã
rien (ou presque).
C’est moi ou les instructions disséminées dans le code sont
un rien parcellaires et largement empreintes de sous-entendu ?
Ou alors, il en manque mais je n’ai rien trouvé d’autre relatif
à ceci sur le net.
Bref, pour résumer, j’ai :
créé une base Postgresql “asso_development” qui essaie de suivre les
exemples
plus ou moins suggérés dans la “doc” et contenant deux tables :
asso_development=# \d projects
Table «public.projects»
Colonne | Type | Modificateurs
------------±--------±---------------------------------------------------------
id | integer | not null default
nextval(‘public.projects_id_seq’::text)
project | text |
manager_id | integer |
asso_development=# \d managers
Table «public.managers»
Colonne | Type | Modificateurs
---------±--------±---------------------------------------------------------
id | integer | not null default
nextval(‘public.managers_id_seq’::text)
manager | text |
asso_development=#
peuplées de quelques articles :
asso_development=# SELECT * from projects;
id | project | manager_id
----±---------±-----------
1 | Projet 1 | 2
2 | Projet 2 | 3
3 | Projet 3 | 1
4 | Projet 4 | 2
(4 lignes)
asso_development=# SELECT * from managers;
id | manager
----±--------
1 | Riri
2 | Fifi
3 | Loulou
(3 lignes)
asso_development=#
lancé la commande
rails asso
→ aucune erreur retournée.
adapté le config/database.yml comme çavabien
copié
ajax_support.rb dans lib/
association_helper.rb dans lib/
association-helper.js dans public/javascripts/
lancé
script/generate model Project
script/generate controller Project
script/generate model Manager
script/generate controller Manager
créé un app/views/layouts/application.rhtml contenant
<%= javascript_include_tag 'prototype', 'association-helper' %> <%= @content_for_layout %>dans les deux contrôleurs :
helper :association
dans la suite des explications, il est dit :
In the controllers queried for candidate associate objects, you need
to provide an action method that handles the respective requests.
You can implement them manually, of course.
For a large number of cases this will not be necessary, hopefully,
when you use RailsExtensions?::AjaxSupport.define_search_action.
ce qui est un peu nébuleux pour moi. :S
mais comme j’ai mis
require ‘ajax_support’
ActionController::Base.class_eval do
include RailsExtension::AjaxSupport
end
à la fin de mon config/environment.rb ça devrait coller.
les contrôleurs
projects_controller.rb :
class ProjectController < ApplicationController
scaffold :project
helper :association
define_search_action :ajax, Project, ‘%manager%’, :limit =>
10, :select_size => 10
def show
@project = Project.find(params[:id])
end
end
manager_controller.rb :
class ManagerController < ApplicationController
scaffold :manager
helper :association
end
les modèles
manager.rb :
class Manager < ActiveRecord::Base
has_many :projects
end
project.rb :
class Project < ActiveRecord::Base
belongs_to :manager
end
pour les versions, lancement de script/server :
About your applicationâ??s environment
Ruby version 1.8.4 (i486-linux)
RubyGems version 0.8.11
Rails version 1.1.2
Active Record version 1.14.2
Action Pack version 1.12.1
Action Web Service version 1.1.2
Action Mailer version 1.2.1
Active Support version 1.3.1
Application root /home/joel/rails/asso
Environment development
Database adapter postgresql
(Sous Ubuntu Dapper)
Le scaffolding fonctionne parfaitement avec les données présentes
dans la base.
dans app/views/project/show.rhtml, associé à l’action du contrôleur
<% for column in Project.content_columns %>
<%= column.human_name %>: <%=h @project.send(column.name) %>
<% end %><%= link_to ‘Edit’, :action => ‘edit’, :id => @project %> |
<%= link_to ‘Back’, :action => ‘list’ %>
si j’y ajoute la ligne suivante
<%= belongs_to_field(‘project’, ‘manager’) { |it| it.manager if it } %>
Ã? partir de là , si j’entre l’URL http://localhost:3000/project/show/1
j’obtiens bien en sus de
Project: Projet 1
Edit|Back
un champ de saisie texte contenant la valeur ‘Fifi’, MAIS quand je
clique
dessus, j’ai droit Ã
Unknown action
No action responded to ajax
Qu’est-ce que j’ai loupé et où ?
Source de la page :
Project: Projet 1