如何为具有不同命名空间的多态模型定义嵌套资源?

时间:2011-07-29 20:25:10

标签: ruby-on-rails ruby-on-rails-3 resources namespaces

我正在努力在routes.rb中定义路由以使用嵌套资源,同时具有多态关联和具有不同命名空间的模型。

有两个控制器(我只显示重要的行):

/app/controllers/project/profile/likes_controller.rb

module Project
 module Profile
  class LikesController < Project::ApplicationController
   def toggle
    ...
   end
  end
 end
end

/app/controllers/project/place/profile/profiles_controller.rb

module Project
 module Place
  module Profile
   class ProfilesController < Project::ApplicationController
   ...
   end
  end
 end
end

...和两个模型,第一个具有多态关联,称为可爱

/app/models/project/profile/like.rb

module Project
 module Profile
  class Like < ActiveRecord::Base
   ...
   belongs_to :likeable, :polymorphic => true
   ...
  end
 end
end

......第二个模型是可爱的

/app/models/project/place/base.rb

module Project
 module Place
  class Base < ActiveRecord::Base

   has_many :likes, :as => :likeable, :class_name => "Project::Profile::Like", :dependent => :destroy

  end
 end
end

...这是我的路线定义:

的routes.rb

...
scope :module => "project" do

 scope :module => "place" do
  resources :places do
    collection do
      scope :module => "profile" do
        resources :profiles do
            resources :likes
        end
      end
    end
  end
 end

 scope :module => "profile" do
  resources :likes do
   collection do
    post :toggle
   end
  end
 end

end 
...

我们可以看到,资源是资源地方的嵌套资源。

我想要达到什么目标?

我希望有一个嵌套资源地方/喜欢的路径,它应该指向:

{:action=>"toggle", :controller=>"project/profile/likes"}

并在这种情况下保留可爱的 place_id 的ID。

我尝试了以下内容:

<%= button_to t(:user_likes), ([likeable, likeable.likes.new]), :action => 'toggle', ... %>

但这导致以下路径:

project_place_profile_basis_project_profile_likes_path

这是不正确的。正确的路径是project_profile_likes_path

以下路线可用(佣金路线):

profile_likes POST /places/profiles/:profile_id/likes(.:format) {:action=>"index", :controller=>"porject/place/profile/likes"}

toggle_likes POST /likes/toggle(.:format) {:action=>"toggle", :controller=>"project/profile/likes"}

有谁知道如何获得 controller =&gt;的路径project / profile / likes action =&gt;肘节

0 个答案:

没有答案