Forum: Rails France [AJAX etc.] AssociationHelper

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
629beee73ffee8b11b0e93597a6590ba?d=identicon&s=25 Joel SAGNES (Guest)
on 2006-05-15 02:31
(Received via mailing list)
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

<html>
<head>
  <%= javascript_include_tag 'prototype', 'association-helper' %>
</head>
<body>
<%= @content_for_layout %>
</body>
</html>

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 %>
<p>
  <b><%= column.human_name %>:</b> <%=h @project.send(column.name) %>
</p>
<% 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 :

<html>
<head>
  <script src="/javascripts/prototype.js?1147649624"
type="text/javascript"></script>
<script src="/javascripts/association-helper.js?1147261551"
type="text/javascript"></script>
</head>
<body>

<p>
  <b>Project:</b> Projet 1
</p>


<a href="/project/edit/1">Edit</a> |
<a href="/project/list">Back</a>

<p><input id="project_manager" name="" readonly="readonly" size="30"
type="text" value="Fifi" /><input id="project_manager_id"
name="project[manager_id]" type="hidden" value="2" />
<div id="project_manager_popup" class="popup"
style="display:none;position:absolute;">
  <input type="text" id="project_manager_popup_query" size=""></input>
  <div id="project_manager_popup_list"></div>
</div>
<script type="text/javascript">
  new BelongsToPopup("project_manager", false);
</script>
<script type="text/javascript">
//<![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>


Désolé si j'ai été long, voire brouillon, mais j'ai essayé d'être aussi
complet que possible.


Merci d'avance pour les éventuels tuyaux, je suis perdu. ;)
91eb330fb36d1e03c856574dfb77d2bc?d=identicon&s=25 Thibaut Barrère (Guest)
on 2006-05-15 09:24
(Received via mailing list)
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
629beee73ffee8b11b0e93597a6590ba?d=identicon&s=25 Joel SAGNES (Guest)
on 2006-05-16 01:04
(Received via mailing list)
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.
This topic is locked and can not be replied to.