[AJAX etc.] AssociationHelper


#1

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

Edit |
Back

//<![CDATA[ new Form.Element.Observer('project_manager_popup_query', 0.5, function(element, value) {new Ajax.Updater('project_manager_popup_list', '/manager/ajax', {asynchronous:true, evalScripts:true, parameters:'query=' + escape(value)})}) //]]> </script> </p> </body> </html> <p>Désolé si j’ai été long, voire brouillon, mais j’ai essayé d’être aussi<br> complet que possible.</p> <p>Merci d’avance pour les éventuels tuyaux, je suis perdu. <img src="/images/emoji/twitter/wink.png?v=6" title=":wink:" class="emoji" alt=":wink:"></p>

#2

Bonjour Joel

ça ne résoudra pas ton problème précis avec ce helper mais peut être que
cette page t’intéressera quand même :

www.ajaxscaffold.com/
et en particulier: www.ajaxscaffold.com/associations_demo/

bon courage

Thibaut


#3

Le lundi 15 mai 2006 à 09:22 +0200, Thibaut Barrère a écrit :

ça ne résoudra pas ton problème précis avec ce helper mais peut être
que cette page t’intéressera quand même :

www.ajaxscaffold.com/
et en particulier: www.ajaxscaffold.com/associations_demo/

En effet mais c’est bigrement intéressant quand même.

Merci pour le tuyau, je vais aussi explorer cette piste.