Les modèles projet et catégorie sont dans une relation has_and_belongs_to_many. Le partiel vu ci-dessous est utilisé sur différentes vues pour afficher un menu déroulant avec toutes les catégories disponibles. Les projets dans la liste sous le menu déroulant sont affichés en fonction du choix effectué par l'utilisateur dans le menu déroulant. Outre les autres catégories, il existe une catégorie nommée "Tout" dont chaque projet est membre. C'est aussi la première entrée dans la catégorie-db-table, car elle a été insérée lors du chargement des migrations dans la base de données.Utilisation de helper d'affichage collection_select pour les objets dans une relation HABTM
Pour l'instant, il n'y a pas d'erreur, mais quelle que soit la catégorie que je choisis, la page "Tout" est rechargée.
Une idée de ce que j'ai besoin de changer dans le code mentionné ci-dessous pour le faire fonctionner comme je le veux? Merci de votre aide!
partielle avec menu déroulant et projet liste
<!-- category dropdown -->
<% form_for category_url(:id), :html => {:method => :get} do |f| %>
<label>Categories</label>
<%= f.collection_select(:category_ids , Category.find(:all), :id , :name) %>
<%= f.submit "Show" %>
<% end %>
<!-- project list -->
<ul class="projectlist">
<% @projects.each do |_project| %>
<li>
<%= link_to(_project.name, _project) %>
</li>
<% end %>
</ul>
Logoutput après avoir choisi la catégorie avec id 2 sur le menu déroulant
Processing ProjectsController#index (for 127.0.0.1 at 2009-02-20 17:26:10) [GET]
Parameters: {"commit"=>"Show", "http://localhost:3000/categories/id"=>{"category_ids"=>"2"}}
Catégorie Modèle
class Category < ActiveRecord::Base
has_and_belongs_to_many :projects, :join_table => "categories_projects"
end
Catégories contrôleur
class CategoriesController < ApplicationController
def show
@projects = Category.find(params[:id]).projects.find(:all)
respond_to do |format|
format.html # show.html.erb
end
end
end
Modèle Projet
class Project < ActiveRecord::Base
has_and_belongs_to_many :categories, :join_table => "categories_projects"
end
Projets Contrôleur
class ProjectsController < ApplicationController
def show
@projects = Project.find(:all)
@project = Project.find(params[:id])
respond_to do |format|
format.html # show.html.erb
end
end
def index
@projects = Project.find(:all)
respond_to do |format|
format.html # index.html.erb
end
end
end
partie des 'routes râteau' Sortie
category GET /categories/:id {:controller=>"categories", :action=>"show"}