2012-05-28 3 views
1

J'ai un modèle de projet qui comporte de nombreuses tâches. Le projet et les tâches peuvent avoir de nombreuses discussions, et j'ai donc fait des discussions modèle polymorphique (voir ci-dessous).Lien vers une action personnalisée dans les associations polymorphes

Je souhaite pouvoir cliquer sur le lien et marquer 'discussion' comme terminé.

La façon dont je suis allé le faire est de faire une action personnalisée dans le 'contrôleur de discussion' qui change la valeur booléenne de l'attribut 'finished' de false à true. Comment rendre link_to helper dans la page de discussion de discussion route vers cette action personnalisée dans le contrôleur de discussions? Aussi, est-ce la meilleure pratique pour le faire?

modèle Discussion

1 class Discussion < ActiveRecord::Base 
    4 belongs_to :user 
    5 belongs_to :discussionable, :polymorphic => true 
28 end 

modèle de projet

1 class Project < ActiveRecord::Base 
    7 has_many :tasks, :dependent => :destroy 
    8 has_many :discussions, :as => :discussionable, :dependent => :destroy 
24 end 

modèle Tâche

1 class Task < ActiveRecord::Base   
    7 belongs_to :project  
14 has_many :discussions, :as => :discussionable, :dependent => :destroy 
27 end 

Alors fa r mon aide link_to ressemble ci-dessous, mais il travail ne marche pas (ne marche pas frapper l'action personnalisée « arrivée » comme je veux) ...

Discussion montrent

7 <%= link_to 'Finish discussion', polymorphic_path([@parent, @discussion]), :action => 'finish' %> 

C'est cette action de finition personnalisée . dans le contrôleur de discussion (je before_filter qui définit cette variable @discussion de params [: id])

33 def finish 
34  if @discussion.update_attribute(:finished, true) 
35  flash[:notice] = "it worked"  
36  else 
37  flash[:alert] = 'You must be an admin to do that' 
38  end 
39 end 

J'ai pas tripoté routes.rb, comme je ne sais pas si Je dois.

routes.rb

1 PrjctMngr::Application.routes.draw do     
13  
14 # PROJECTS 
15 resources :projects do 
16  resources :tasks 
17  resources :discussions 
18 end 
19 
20 # TASKS 
21 resources :tasks do 
22  resources :subtasks 
23  resources :discussions 
24 end 
31 
32 # DISCUSSIONS 
33 resources :discussions do 
34  resources :comments  
35 end 
36 
37 end 

Répondre

3
<%= link_to 'Finish discussion', polymorphic_path([@parent, @discussion], :action => 'finish'), :method => :put %> 
l'option d'action

est pour l'assistant de chemin, étiquette ne aide;)

all assuming you have route set up propery 
#routes.rb 
resources :tasks do 
    resources :discussions do 
    put :finish, :on => :member 
    end 
end 
+0

que je reçois cette erreur> ActionView :: Template :: Erreur: méthode non définie 'finish_task_discussion_path 'pour # <# : 0xb3865868> ..... Pourquoi est-ce? De plus, je n'ai pas touché mon fichier routes.rb pour prendre en charge cette action personnalisée. Devrais-je avoir? – oFca

+1

en effet vous devriez avoir, updatad réponse –

+0

J'ai ajouté les routes à la question, pouvez-vous s'il vous plaît utiliser cela pour me montrer comment je devrais l'éditer? – oFca

Questions connexes