2

admin_projects や admin_project などの通常のルートを提供する管理名前空間がありますが、通常の方法で動作していません。これは私の最初の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...>

":id" にはオブジェクト全体が含まれているように見えるので、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.

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

4

2 に答える 2

2

面白い。to_paramProject でメソッドを定義するとどうなりますか? 例えば

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

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

于 2009-07-31T16:48:53.153 に答える
0

私はこれであなたを助けることができればいいのにと思います。いくつかの名前空間セクションを持つ大規模なアプリケーションがあります。私たちのルートはあなたが説明した正確な方法で定義されており、オブジェクトを使ってパスヘルパーを呼び出しています。IDを使用してアプリケーションのどこにアクセスしているかはわかりません。

私たちのアプリケーションはRails2.1で始まり、ルーティングに大きな変更を加えることなく2.2と2.3に移行しました。申し訳ありませんが、これ以上のお手伝いはできませんでした。

ピア

于 2009-08-02T00:46:29.660 に答える