質問

admin_projectsやadmin_projectなどの通常のルートを提供するadmin名前空間がありますが、通常の方法では動作しません。これは私の最初のRails 2.3プロジェクトですので、関連するかもしれませんが、Google経由で情報を見つけることはできません。

map.namespace(:admin) do |admin|
  admin.resources :projects
end

奇妙なのは、指定されたURL(たとえば/ admin / projects / 1)の場合です。URLを取得するためにオブジェクトを渡す必要はありません。

<%= admin_project_path %> # => /admin/projects/1

心配する必要はありません。これは以前は気づかなかった問題です。

しかし、いつものようにオブジェクトを渡そうとした場合:

<%= admin_project_path(@project) %> # => admin_project_url failed to generate from {:controller=>"admin/projects", :action=>"show", :id=>#<Project id: 1, name: "teamc...>

&quot;:id&quot;オブジェクト全体が含まれているようですので、IDを直接渡してみて、動作します:

<%= admin_project_path(@project.id) %> # => /admin/projects/1

これはそれほど悪いことではありませんが、フォームに関しては通常[:admin、@object]を使用しますが、

<%= url_for [:admin, @project.id] %> # => undefined method `admin_fixnum_path'

したがって、使用する正しいルートを決定するためにオブジェクトクラスが必要なので、idを渡すことはできません。

<%= url_for [:admin, @project] %> # => Unfortunately this yields the same error as passing a object to admin_project_path, which is what it is calling.

間違いを見つけることはできません。これはかなり標準的なことなので、何が間違っているのかわかりません...

役に立ちましたか?

解決

興味深い。 Projectで to_param メソッドを定義するとどうなりますか?たとえば

class Project < ActiveRecord::Base
  def to_param
    self.id
  end
end

これはデフォルトである必要があり、必要ではありません。しかし、明示的にするとどうなりますか?上記のメソッドを追加してから、@ projectのみを渡すという元のアプローチに戻ってみてください

他のヒント

この件についてお役に立てれば幸いです。名前空間セクションがいくつかある大規模なアプリケーションがあります。ルートは、説明したとおりの方法で定義され、オブジェクトを使用してパスヘルパーを呼び出しています。 IDを使用してアプリケーションのどこにアクセスしますか。

アプリケーションはRails 2.1で開始され、ルーティングに大きな変更はなく2.2および2.3に移行しました。申し訳ありませんが、これ以上サポートすることができませんでした。

ピア

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top