我的项目模型有很多任务。项目和任务都可以进行很多讨论,因此我制作了讨论多态模型(见下文)。
我希望能够点击链接并将“讨论”标记为已完成。
我继续这样做的方法是在'讨论控制器'中进行自定义操作,将'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
答案 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