0

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ハックを使用してこれを解決しましたが、とにかく奇妙な動作です:

単一リソースの Rails ネストされたルート

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

しかし、とにかく、このルーティングの要点はまだわかりません。それにもかかわらず、アカウントを表示するルートを見つけることができません。

/users/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 に答える