1

多くのタスクを持つプロジェクト モデルがあります。プロジェクトとタスクの両方で多くのディスカッションを行うことができるため、ディスカッション ポリモーフィック モデルを作成しました (以下を参照)。

リンクをクリックして「ディスカッション」を終了としてマークできるようにしたいと考えています。

私が行った方法は、「終了」属性のブール値を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
4

1 に答える 1

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
于 2012-05-28T14:53:43.923 に答える