0

Railsがコントローラーパスに基づいて追加のサブディレクトリを検索しているという問題があります。Railsに1つの余分なサブディレクトリの検索を停止させる方法はありますか?私は今持っているディレクトリ構造が好きです。詳細は次のとおりです。

Railsはこのエラーメッセージを返します。ご覧のとおり、v12回実行されます。

Template is missing
Missing template api/v1/v1/print

コントローラーがapp/controllers/api/v1/v1_controller.rbあり、ビューがありますapp/views/api/v1/print.html.erb

config / routers.rbの特定のルートは(半切り捨て)です:

namespace :api do
    scope module: :v1 do
        match "v1/print",
            :to => "v1#print"
    end
end

ルートに基づいて、それは大丈夫に見えます。レーキルートはこれを示しています:

api_v1_print GET|POST /api/v1/print(.:format)  api/v1/v1#print {:format=>"html"}

1つのディレクトリが深すぎるのはなぜですか?

4

2 に答える 2

1

v1次のように、を一致から 削除するだけです。

namespace :api do
    scope module: :v1 do
        match "print",
            :to => "v1#print"
    end
end

編集

申し訳ありませんが、問題はテンプレートフォルダにあります。

app/views/api/v1/print.html.erb
app/views/(namespace)/(module)/(action) <- you have forgoten the controller

正しいものは次のとおりです。

app/views/api/v1/v1/print.html.erb
于 2013-02-11T10:56:18.860 に答える
1

問題は、Railsが各コントローラーごとにサブディレクトリーがあると想定していることです。モジュールとコントローラー名にv1があるため、重複が形成されます。Railsの慣習に逆らうつもりはありません。代わりに、コントローラーの名前をAPIコントローラー(または同様のもの)に変更し、APIというディレクトリの下にテンプレートを配置します。

それでもこれを実行したい場合はrender、印刷アクション内で使用し、使用する正確なファイルを指定するだけです(ここを参照) 。

于 2013-02-11T11:04:16.150 に答える