【问题标题】:Restricting routes to nested resources in Rails限制 Rails 中嵌套资源的路由
【发布时间】:2010-07-14 20:50:20
【问题描述】:

我正在尝试创建子资源不存在的嵌套资源。例如,链接到 PersonAddress 资源。

我的路由声明如下所示:

map.resources :persons,
:has_many => :addresses

这给了我以下路线:

             person_addresses GET    /persons/:person_id/addresses                  {:controller=>"addresses", :action=>"index"}
   formatted_person_addresses GET    /persons/:person_id/addresses.:format          {:controller=>"addresses", :action=>"index"}
                              POST   /persons/:person_id/addresses                  {:controller=>"addresses", :action=>"create"}
                              POST   /persons/:person_id/addresses.:format          {:controller=>"addresses", :action=>"create"}
           new_person_address GET    /persons/:person_id/addresses/new              {:controller=>"addresses", :action=>"new"}
 formatted_new_person_address GET    /persons/:person_id/addresses/new.:format      {:controller=>"addresses", :action=>"new"}
          edit_person_address GET    /persons/:person_id/addresses/:id/edit         {:controller=>"addresses", :action=>"edit"}
formatted_edit_person_address GET    /persons/:person_id/addresses/:id/edit.:format {:controller=>"addresses", :action=>"edit"}
               person_address GET    /persons/:person_id/addresses/:id              {:controller=>"addresses", :action=>"show"}
     formatted_person_address GET    /persons/:person_id/addresses/:id.:format      {:controller=>"addresses", :action=>"show"}
                              PUT    /persons/:person_id/addresses/:id              {:controller=>"addresses", :action=>"update"}
                              PUT    /persons/:person_id/addresses/:id.:format      {:controller=>"addresses", :action=>"update"}
                              DELETE /persons/:person_id/addresses/:id              {:controller=>"addresses", :action=>"destroy"}
                              DELETE /persons/:person_id/addresses/:id.:format      {:controller=>"addresses", :action=>"destroy"}

现在我想确保一个人的地址是只读的,即我只想要地址的 showindex 操作。

我试过这个:

  map.resources :persons,
  :has_many => :addresses,
  :collection => { :addresses => [ :show, :index ] }

得到了这个错误:

(in /home/rmk/app)
rake aborted!
Invalid HTTP method specified in route conditions: {:method=>:show}

(See full trace by running task with --trace)

有什么方法可以实现吗?

编辑: 我的主要问题是我没有正确使用代码块(我想尽可能使用 has_one 等)。所以我的persons 路线看起来像这样(有点人为的例子):

map.resources :persons, :has_one => :ssn, :except => [:new, :edit] do |person|
 person.resources :addresses, :only => [:index, :show]
end

【问题讨论】:

    标签: ruby-on-rails rails-routing


    【解决方案1】:

    这是你想要做的吗?

    map.resources :persons do |person|
      person.resources :addresses, :only => [:index, :show]
    end
    

    这会将地址创建为人员的嵌套资源,但只会使索引和显示视图可用。

    【讨论】:

    • 太棒了,卡尔,谢谢。正如我在上面的编辑中解释的那样,我没有正确使用代码块(我想使用 :has_one、:has_many 等对 :persons 指定其他约束,并且仅在必要时才使用代码块)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    相关资源
    最近更新 更多