【问题标题】:Rails routing resourcesRails 路由资源
【发布时间】:2014-02-08 02:55:41
【问题描述】:

使用 rails 4 并尝试找出如何在配置文件和计划中为 devise_user 执行嵌套路由

这是我的路线.rb

   devise_for :users, :path => '', :path_names => {:sign_in => 'login', :sign_out => 'logout'}
   resource :profile , :only => [ :edit, :update]
   resource :plan 

以下是我如何设计在注册时添加个人资料,以防您想知道

  class User < ActiveRecord::Base

   has_one :profile, dependent: :destroy
   after_create :create_profile
   devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable

 private
    def create_profile
     self.profile = Profile.create
    end
 end

【问题讨论】:

  • 在您的routes.rb 文件中,如果您想为控制器定义RESTful 路由,请使用复数resources 而不是单数resource。例如:您应该将resource :plan 更改为resources :plan
  • @KirtiThorat resource 对于单一资源应该没问题,我认为profile 在这种情况下就是这样。见ActionDispatch::Routing::Mapper::Resources
  • @Tim 感谢您扩展我的知识。

标签: devise ruby-on-rails-4 routes nested-attributes


【解决方案1】:

尝试将您的额外路线包装在devise_scope 中。比如:

devise_scope :user do
  resource :profile , :only => [ :edit, :update]
  resource :plan
end

虽然我刚刚注意到您将 path 设置为 '' 所以无论如何都不会有路径前缀,所以我不确定您的总体意图是什么。您可能需要将它指向您的控制器,具体取决于您定义控制器的位置 - 例如,如果您在应用程序的控制器目录中定义了配置文件控制器,您不希望设计尝试在其命名空间中找到配置文件控制器,因此您可能需要在您的个人资料资源上指定 to: =&gt; 'profile'

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2016-04-05
    相关资源
    最近更新 更多