1

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

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

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

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

问题是当我去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| %>

关于如何解决这个问题的任何想法?

4

3 回答 3

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-你现有的导轨应用程序

希望这可以帮助。

于 2013-05-11T09:47:32.823 回答
0

Try changing this line of code:

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

to

<%= form_for(resource, :as => resource_name, :url => customer_registration_path(resource_name)) do |f| %>
于 2013-05-09T14:43:54.597 回答
0

我通过将 url 更改为硬编码路径来实现这一点。例如,如果您运行 rake routes 并获得:

$ 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| %>
于 2014-07-01T19:19:08.343 回答