0

我在 Rails 中遇到嵌套路由的问题,我不知道我做错了什么。

简而言之:我使用 Devise 进行身份验证和注册。现在我想让用户输入有关他的联系数据的更多详细信息。为了保持用户模型小,我想使用一个不同的模型,称为帐户。由于用户只有一个帐户,因此我使用一对一关联和嵌套路由。但不知何故,路由不起作用。这是我的用户模型:

用户.rb

class User < ActiveRecord::Base
  has_one :account, :dependent => :destroy
  attr_accessible :username, :email, :password, :password_confirmation, :remember_me

这是我的帐户模型:

帐号.rb

class Account < ActiveRecord::Base
 attr_accessible :anrede, :land, :nachname, :plz, :stadt, :strasse, :user_id, :vorname
 belongs_to :user
end

我的路线文件如下所示:

路线.rb

devise_for :users, :path => 'members'
 resources :users do
  resource :account
 end

由于用户可能还没有帐户,因此我在我看来对此进行了测试:

        <% if current_user.account.try %>
        <li><%= link_to "Account", user_account_path %></li>
        <% else %>
        <li><%= link_to "create Account", new_user_account_path %></li>
        <% end %>

但是当我使用登录用户进入根路径时,Rails 告诉我

Routing Error
No route matches {:action=>"new", :controller=>"accounts"}

但是我的 accounts_controller.rb 中有一个新操作,因为我已经搭建了整个 CRUD 集(使用 current_user.build_account 编辑创建),它也是 rake 路由给出的路径。

我绝望地陷入了这个困境!有人可以帮我吗?

编辑 这是我的 rake 路线的输出:

        user_account POST   /users/:user_id/account(.:format)      accounts#create
    new_user_account GET    /users/:user_id/account/new(.:format)  accounts#new
   edit_user_account GET    /users/:user_id/account/edit(.:format) accounts#edit
                     GET    /users/:user_id/account(.:format)      accounts#show
                     PUT    /users/:user_id/account(.:format)      accounts#update
                     DELETE /users/:user_id/account(.:format)      accounts#destroy

编辑2

这是操作新表单的错误消息:

NoMethodError in Accounts#new

Showing /home/stonjarks/Work/toytrade_devise/app/views/accounts/_form.html.erb where line #1 raised:

undefined method `accounts_path' for #<#<Class:0xa44d0cc>:0xab6222c>

Extracted source (around line #1):

1: <%= form_for(@account) do |f| %>
2:   <% if @account.errors.any? %>
3:     <div id="error_explanation">
4:       <h2><%= pluralize(@account.errors.count, "error") %> prohibited this account from being saved:</h2>

我使用这个 SO hack 解决了这个问题,但无论如何这是一个奇怪的行为:

单一资源的 Rails 嵌套路由

<%= form_for @account,:url=>{:action=>:create}

但无论如何,我仍然不明白这条路线的意义。尽管如此,我还是无法找到显示帐户的路线:

/用户/1/帐户

ActiveRecord::RecordNotFound in AccountsController#show

Couldn't find Account without an ID
4

1 回答 1

0

new_user_account_path缺少应提供的用户实例,例如:

new_user_account_path(current_user)

如果您查看以下行:

new_user_account GET    /users/:user_id/account/new(.:format)  accounts#new

您可以看到该路径需要一个 :user_id - 一个用户实例。

您可以在此处阅读以进一步说明您的问题。

于 2012-08-23T11:24:14.620 回答