2

ルートに問題があります。これは、パラメーターが正しく渡されていないことが原因だと思います。ユーザーの編集ページに移動しようとすると、次のエラーが表示されます。

No route matches {:action=>"edit", :controller=>"admin/users", :locale=>#<User id: 10, first_name: "Chase", last_name: "Jensen", email: "email@email.com", password_digest: "$2a$10$xTvG5gP73w2/nVW5jD.BSO3Z46S5v9oGogmfjo3gsGHf...", access_level: 2, last_login: nil, auth_token: nil, created_at: "2012-04-20 02:19:33", updated_at: "2012-04-20 02:19:33">}

:locale=>#User ID (hash) と表示されていることに気付きましたが、それが問題かどうかはわかりません。もしそうなら、なぜユーザーハッシュを :locale として入れているのかわかりませんか? これが私のアプリコードの一部です

問題のあるコード:
app/views/admin/users/index.html.erb

<% @owners.each do |owner| %>
  <%= owner.first_name %>
  <%= link_to "Edit Owner", edit_admin_user_path(owner) %>
  <%= link_to "Delete Owner", admin_user_path(owner), :method => :delete, :confirm => "Are you sure you want to delete this owner?" %>
<% end %>

ユーザーコントローラー

class Admin::UsersController < Admin::BaseController
  def edit
    @user = User.find(params[:id])
  end
  def update
    @user = User.find(params[:id])

    if @user.update_attributes(params[:user])
      flash[:notice] = "User has been updated."
      redirect_to @user
    else 
      flash[:alert] = "User has not been updated."
      render :action => "edit"
    end
  end
  def index
    @owners = User.all
  end
end

routes.rb (短縮)

scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
  namespace :admin do
    resources :users do
      collection do
        get :newowner
      end
    end
  end
end

rake ルート出力

newowner_admin_users GET    /:locale/admin/users/newowner(.:format) {:locale=>/en|es/, :action=>"newowner", :controller=>"admin/users"}
     admin_users GET    /:locale/admin/users(.:format)          {:locale=>/en|es/, :action=>"index", :controller=>"admin/users"}
                 POST   /:locale/admin/users(.:format)          {:locale=>/en|es/, :action=>"create", :controller=>"admin/users"}
  new_admin_user GET    /:locale/admin/users/new(.:format)      {:locale=>/en|es/, :action=>"new", :controller=>"admin/users"}
 edit_admin_user GET    /:locale/admin/users/:id/edit(.:format) {:locale=>/en|es/, :action=>"edit", :controller=>"admin/users"}
      admin_user GET    /:locale/admin/users/:id(.:format)      {:locale=>/en|es/, :action=>"show", :controller=>"admin/users"}
                 PUT    /:locale/admin/users/:id(.:format)      {:locale=>/en|es/, :action=>"update", :controller=>"admin/users"}
                 DELETE /:locale/admin/users/:id(.:format)      {:locale=>/en|es/, :action=>"destroy", :controller=>"admin/users"}

ルートが一致しているように見えるのに、なぜこのエラーが発生するのか、とても混乱しています。誰でもこれについて何か洞察がありますか?前もって感謝します。

編集:

この時点で、アプリケーション コントローラーでロケールを設定する必要があります。

before_filter :set_locale

private
def set_locale
  I18n.locale = params[:locale] if params[:locale].present?
end

そして私のアプリケーションビュー app/views/layouts/application.html.erb で

<%= link_to_unless_current "English", locale: "en" %> |
<%= link_to_unless_current "Spanish", locale: "es" %> 

デフォルトで EN になっていませんか?

4

2 に答える 2

1

Ryan Bates railscast で指定されているように、これをアプリケーションコントローラーに追加すると修正されました。

def default_url_options(options = {})
  {locale: I18n.locale}
end
于 2012-04-21T19:24:14.110 に答える
0

ロケール引数を渡さなかった
Tryedit_admin_user_path(owner, :locale => "en")

于 2012-04-20T04:51:35.067 に答える