0

これは修正されました。私が書いた別のビューからコピーしたときに、:method=>フォームヘルパーを残したと思います。誤警報。

Rails 3アプリケーションに「rakeroutes」に表示されるルートがありますが、ルート一致なしエラーが発生します。

current_userが管理する会社の下に新しいユーザーを作成および追加するための名前空間ルートを作成しようとしています。名前空間は「会社」です。この操作を処理する必要があるコントローラーは「users_controller」であり、controllers->companyフォルダー内にあります。

私のroutes.rbファイルには次のコードが含まれています:

namespace :company do
  resources :users
  resources :manage, :only => [:show,:edit,:update]
end

devise_for :users

app-> controllers-> companyフォルダーの下のusers_controller.rbには、次のコードが含まれています。

def new
  @user = current_user.company.users.new
end

def create
  @user = current_user.company.users.create(params[:user])
  if @user.save
    flash[:notice] = "Successfully Added New User"
    redirect_to company_path(current_user.company.id)
  else
    flash[:warn] = "Correct Errors and Resubmit"
   # render :action => 'new'
  end
end

app-> views-> company->users->create.html.erbの下にある作成アクションのビューには次のものが含まれます。

<h2>Adding User for <%= current_user.company.name %></h2>

<%= form_for(@user, :url => company_users_path) do |f| %>


  <p><%= f.label :email %><br />
  <%= f.email_field :email %></p>

  <p><%= f.label :first_name %><br />
  <%= f.text_field :first_name %></p>

  <p><%= f.label :last_name %><br />
  <%= f.text_field :last_name %></p>

  <p><%= f.label :password, "New Password" %><br />
    <%= f.password_field :password %></p>

  <p><%= f.label :password_confirmation, "Confirm New Password" %><br />
    <%= f.password_field :password_confirmation %></p>

  <p><%= f.submit "Add User" %></p>
<% end %>

<%= link_to "Back", :back %>

そして最後に、「rakeroutes」コマンドを実行すると次のようになります。

company_users     GET    /company/users(.:format)           {:action=>"index",    :controller=>"company/users"}
                  POST   /company/users(.:format)           {:action=>"create", :controller=>"company/users"}
new_company_user  GET    /company/users/new(.:format)       {:action=>"new", :controller=>"company/users"}
edit_company_user GET    /company/users/:id/edit(.:format)  {:action=>"edit", :controller=>"company/users"}
company_user      GET    /company/users/:id(.:format)       {:action=>"show", :controller=>"company/users"}
                  PUT    /company/users/:id(.:format)       {:action=>"update", :controller=>"company/users"}
                  DELETE /company/users/:id(.:format)       {:action=>"destroy", :controller=>"company/users"}

'new'アクションは問題なくレンダリングされます。フォームを送信した後に受け取るエラーは次のとおりです。

Routing Error

No route matches "/company/users

私は認証にdevisegemを使用しており、必要に応じてアプリケーションの詳細を提供できます。これまでのところ、私が追加した他のすべてはうまく機能します。名前空間の定義方法と関係があると思います。私はまだレールにかなり慣れていません。これは名前空間ルーティングの最初の試みです。

提供した情報が多すぎたり少なすぎたりした場合は、お詫び申し上げます。どんな助けでも大歓迎です。

4

1 に答える 1

1

form_forを次のように変更してみてください。

form_for([:company,@user])

動作するはずです。http://guides.rubyonrails.org/form_helpers.html#dealing-with-namespacesを参照してください

于 2011-08-21T22:31:07.357 に答える