Rails のネストされたルートの問題に直面しています。何が間違っているのかわかりません。
一言で言えば、認証と登録にDeviseを使用しています。ここで、ユーザーに自分の連絡先データに関するより詳細な情報を入力してもらいたいと考えています。ユーザーモデルを小さく保つために、アカウントと呼ばれる別のモデルを使用したいと考えています。ユーザーは 1 つのアカウントしか持たないため、1 対 1 の関連付けとネストされたルートを使用します。しかし、どういうわけかルーティングが機能しません。これは私のユーザーモデルです:
user.rb
class User < ActiveRecord::Base
has_one :account, :dependent => :destroy
attr_accessible :username, :email, :password, :password_confirmation, :remember_me
これは私のアカウントモデルです:
account.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"}
しかし、CRUD セット全体 (current_user.build_account で create を編集) をスキャフォールディングしたため、accounts_controller.rb に新しいアクションがあり、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
EDIT2
これは、新しいフォーム アクションのエラー メッセージです。
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ハックを使用してこれを解決しましたが、とにかく奇妙な動作です:
<%= form_for @account,:url=>{:action=>:create}
しかし、とにかく、このルーティングの要点はまだわかりません。それにもかかわらず、アカウントを表示するルートを見つけることができません。
/users/1/アカウント
ActiveRecord::RecordNotFound in AccountsController#show
Couldn't find Account without an ID