私はror 3.2を使用しており、管理目的で使用するコントローラーを独自のフォルダーに分離したいと考えていますが、パブリックコントローラーが使用するのと同じモデルを使用しています。ここで説明する問題に遭遇しました。私は別の方法で問題に遭遇しましたが、これはそれをよりよく説明しています。
新しいレールアプリ、私は実行します:
rails generate scaffold admin/stats name:string value:string
それが作成する他のすべてのファイルの中で:
create app/models/admin/stat.rb
すべてが下で動作します:
localhost:3000/admin/stats/
次のルートが表示されます。
admin_stats GET /admin/stats(.:format) admin/stats#index
POST /admin/stats(.:format) admin/stats#create
new_admin_stat GET /admin/stats/new(.:format) admin/stats#new
edit_admin_stat GET /admin/stats/:id/edit(.:format) admin/stats#edit
admin_stat GET /admin/stats/:id(.:format) admin/stats#show
PUT /admin/stats/:id(.:format) admin/stats#update
DELETE /admin/stats/:id(.:format) admin/stats#destroy
そしてここに私のroutes.rbファイル:
SampleApp::Application.routes.draw do
namespace :admin do resources :stats end
namespace :admin do resources :users end
root :to => 'welcome#index'
end
今、何が私を困惑させます。インターフェイスを介して 1 つのデータ行を入力してみましょう。統計が models/ の下にあり、models/admin の下にないと仮定します。クラスを変更して移動し、テーブルの名前を変更し、コントローラーのインデックスメソッドをこれに変更しました(新しいモデルを反映するため)
def index
@admin_stats = Stat.all #was Admin::Stat.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @admin_stats }
end
end
同じ URL localhost:3000/admin/stats/ に再度アクセスすると、存在しないメソッドのこのエラーが表示されるのはなぜですか?
NoMethodError in Admin/stats#index
Showing [...]/sample_app/app/views/admin/stats/index.html.erb where line #16 raised:
undefined method `stat_path' for #<#<Class:0x007fe96d51a348>:0x007fe96d53a1e8>
...
16: <td><%= link_to 'Show', admin_stat %></td>
ビュー ファイルには触れていませんが、オブジェクトはまだ @admin_stats と呼ばれており、「rake routes」で作成されたルートは期待どおりです。なぜ壊れているのですか?(通常のモデルを単純に継承する各モデルの管理モデルを持ち、オブジェクトとして Admin::Stat を使用するだけで解決策を見つけましたが、これが壊れる理由を理解したいと思っています)