多くのタスクを持つプロジェクト モデルがあります。プロジェクトとタスクの両方で多くのディスカッションを行うことができるため、ディスカッション ポリモーフィック モデルを作成しました (以下を参照)。
リンクをクリックして「ディスカッション」を終了としてマークできるようにしたいと考えています。
私が行った方法は、「終了」属性のブール値を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