Ruby on rails 链接到多态关联中的自定义操作

Ruby on rails 链接到多态关联中的自定义操作,ruby-on-rails,Ruby On Rails,我有一个有很多任务的项目模型。项目和任务都可以有很多讨论,因此我将讨论做成多态模型(见下文) 我希望能够点击链接并将“讨论”标记为完成 我接下来要做的是在“讨论控制器”中进行自定义操作,将“finished”属性的布尔值从false更改为true。如何使“讨论显示”页面中指向帮助者的链接成功路由到“讨论控制器”中的自定义操作?还有,这是最好的做法吗 讨论模式 1 class Discussion < ActiveRecord::Base 4 belongs_to :user

我有一个有很多任务的项目模型。项目和任务都可以有很多讨论,因此我将讨论做成多态模型(见下文)

我希望能够点击链接并将“讨论”标记为完成

我接下来要做的是在“讨论控制器”中进行自定义操作,将“finished”属性的布尔值从false更改为true。如何使“讨论显示”页面中指向帮助者的链接成功路由到“讨论控制器”中的自定义操作?还有,这是最好的做法吗

讨论模式

  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
我也没有修改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

然后我得到这个错误>动作视图::模板::错误:未定义的方法`完成任务\讨论\路径'。。。。。为什么呢?此外,我还没有接触我的routes.rb文件来处理此自定义操作。我应该有吗?事实上,你应该有,更新和响应我已经在问题中添加了路线,你能用它来告诉我我应该如何编辑它吗?是的,如果你更新模型会更好。别忘了在操作中保存它。感觉就像在线教程:)请参阅我编辑的响应,如果视图模板和控制器代码正常,它应该可以工作。
 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
  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
 <%= 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