0

ですから、これは私を困惑させています。ルートに関しては最高ではありませんが、私が達成しようとしていることは単純なようです。私が持っているのは、現在スーパーユーザーだけがアクセスできる機能です。今度は、その機能をportal_administratorに拡張したいと思います。このページにアクセスするには、次のようなlink_toが必要です。

 = link_to('Data', portal_datum_path(current_portal.id), :id => :super_user_data_link)

マッチでルーティングされます

 match '/portal_data/:id', :controller => 'portal_data', :action => 'show', :as => 'portal_datum'

これで問題なく動作するようになり、IDパラメータを持つURLになります。ルーティング先のページで使用されます。実際、IDがあることを確認するbeforeフィルターがあります。

  def load_portal
    @portal = Portal.find(params[:id])
  end

これにより、サスパーユーザーはURLを確認するだけで自分がどのポータルにいるかを確認できます。これをユーザーに拡張しているので、ユーザーがどのポータルIDを使用しているかを確認したくないので、次のような単一のリソースを使用すると思いました。

 = link_to('Data', portal_data_path, :id => :super_user_data_link)

とともに

 match '/portal_data' => "portal_data#show"

そのため、同じ場所にルーティングされますが、URLはクリーンに保たれます。しかし、明らかにこのドセントは機能します。ビフォアファイラーをハードコーディングして最初のポータルを受け入れる場合でも、jsutはエラーをスローします

No route matches {:controller=>"portal_data", :action=>"show"}

しかし、私が自分のルートをかき集めたら、そこにありますか?

私が間違っていることは明らかなアイデアだと確信していますか?

4

1 に答える 1

0

私がしなければならなかったのは、 :id をオプションのパラメーターにすることだけでした...

match '/portal_data(/:id)'

そして、それは機能します:)次に、コントローラーで...を探します

def load_portal
  @portal = Portal.find(params[:id] || current_portal.id)
end

...パラメーターにポータル ID がなかった場合は、アカウントのポータル ID。

于 2012-09-27T09:35:08.763 に答える