将Devise模型添加到RefineryCMS应用程序时出现问题

时间:2013-05-03 07:08:33

标签: devise refinerycms

我想将一个Devise模型添加到RefineryCMS应用程序,以允许客户登录并管理他们的个人资料。这样做似乎是合理的,因为客户与CMS无关。由于RefineryCMS使用Devise,我认为这是一件简单的事情。我是从一个空白的平板开始,而不是与现有的应用程序集成。

重现我遇到的问题的步骤:

$ refinerycms my_fun_app
$ cd my_fun_app
$ rails generate devise customer
$ rake db:migrate

完成上述步骤后,我启动应用程序(使用rails server)并转到http://localhost:3000系统会提示我创建一个Refinery用户。一切都很好。

问题是当我转到http://localhost:3000/customers/sign_up时,我得到NoMethodError

undefined method `customer_registration_path' for #<ActionDispatch::Routing::RoutesProxy:0x00000003cc9810>

在/home/tom/.rvm/gems/ruby-2.0.0-p0/gems/devise-2.0.5/app/views/devise/registrations/new.html.erb中从此行引发错误:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>

有关如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:1)

这是RefineryCMS的一个已知问题,因为它基于Devise和设置Devise作为自己的方式:

Devise.setup do |config|
  # Please do not change the router_name away from :refinery
  # otherwise Refinery may not function properly. Thanks!
  config.router_name = :refinery
end

因此,在Devise中,URL帮助程序找不到应用程序中定义的那个。

似乎没有针对这个问题的正式解决方案,而且RefineryCMS的人正在研究这个问题,因此可能会在将来的版本中修复。但是,有一篇关于如何将Refinery和Devise集成到您现有的Rails 3.2应用程序中的好文章,它可能会给您一些想法:http://sdownie.com/blogs/integrating-refinery-rails-3-2-into-your-existing-rails-app

希望这有帮助。

答案 1 :(得分:0)

尝试更改此行代码:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>

<%= form_for(resource, :as => resource_name, :url => customer_registration_path(resource_name)) do |f| %>

答案 2 :(得分:0)

我通过将url更改为硬编码路径来实现此目的。例如,如果您运行rake路线并获得:

$ bundle exec rake routes | grep devise
cancel_customer_registration GET    /customers/cancel(.:format)        devise/registrations#cancel
       customer_registration POST   /customers(.:format)               devise/registrations#create
   new_customer_registration GET    /customers/sign_up(.:format)       devise/registrations#new
  edit_customer_registration GET    /customers/edit(.:format)          devise/registrations#edit
                             PUT    /customers(.:format)               devise/registrations#update
                             DELETE /customers(.:format)               devise/registrations#destroy

然后你会改变这行代码:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>

<%= form_for(resource, :as => resource_name, :url => "/customers") do |f| %>