2012-05-28 47 views
1

我有許多任務的項目模型。項目和任務都可以有很多討論,因此我討論了多態模型(參見下文)。鏈接到多態關聯中的自定義動作

我希望能夠點擊鏈接並標記'討論'完成。

我繼續這樣做的方法是在「討論控制器」中進行自定義操作,將「已完成」屬性的布爾值從false更改爲true。如何在討論展示頁面中將link_to helper成功路由到討論控制器中的自定義動作?另外,這是做這件事的最佳做法嗎?

討論模式

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

項目模型

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

任務模式

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

所以發[R我的link_to助手看起來像下面,但它不工作(犯規擊打定製「完成」的行動,因爲我想)......

討論節目

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

這是本自定義完成動作。在討論控制器(I具有的before_filter限定從PARAMS此@discussion變量[: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 

我還沒有與routes.rb中撥弄,因爲我不知道是否我不得不。

的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 

回答

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

操作選項是路徑的幫手,沒有吊牌幫手;)

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

比我得到這個錯誤> ::的ActionView ::模板錯誤: 未定義的方法'finish_task_discussion_path'爲#<#:0xb3865868> .....爲什麼?另外,我還沒有碰過我的routes.rb文件來照顧這個自定義操作。應該有我嗎? – oFca

+1

確實你應該有,updatad迴應 –

+0

我已經添加了路線的問題,你可以請用它來告訴我應該如何編輯它? – oFca