我想将一个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| %>
有关如何解决此问题的任何想法?
答案 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| %>