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

时间:2012-05-28 14:49:54

标签: ruby-on-rails

我的项目模型有很多任务。项目和任务都可以进行很多讨论,因此我制作了讨论多态模型(见下文)。

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

我继续这样做的方法是在'讨论控制器'中进行自定义操作,将'finished'属性的布尔值从false更改为true。如何使讨论显示页面中的link_to帮助成功地路由到讨论控制器中的自定义操作?另外,这是最好的做法吗?

讨论模式

  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

到目前为止,我的link_to助手看起来如下,但它不起作用(并没有按照我想要的那样触发自定义'完成'动作)......

讨论节目

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

这是讨论控制器中的自定义完成操作。(我有来自params [:id]的@discussion变量的before_filter)

 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

1 个答案:

答案 0 :(得分:3)

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

action选项用于路径助手,而不是tag helper;)

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