0

例として、このようなroutes.rbファイルがあります

FilePicker::Application.routes.draw do

  match "youtube/search/videos/:query(/:maxResults)", :to => "Youtube#youtubeVideos", :via => :get
  match "youtube/searchWithToken/:query/:token(/:maxResults)", :to => "Youtube#youtubeTokenPageVideos", :via => :get

  root :to => 'home#index'
end

そして、コントローラーとアクションの組み合わせを使用して、ルートを取り戻すことができるようにしたいと考えています。そんな感じ:

class YoutubeController < ApplicationController

    def initialize
        @routeA = getRoute 'Youtube', 'youtubeVideos'
        puts @routeA #=> youtube/search/videos
    end

    def youtubeVideos
        @routeB = getRoute 'Youtube', 'youtubeTokenPageVideos'
        puts @routeB #=> youtube/searchWithToken
    end
    def youtubeTokenPageVideos
        ...
    end
end

これは可能ですか?

編集

request.path使用される実際のパスが得られるため、解決策ではないと思います。例として、アクションyoutubeVideosが呼び出されました。ここから、アクションのパスを動的に取得するにはどうすればよいyoutubeTokenPageVideosですか? (上記の例も編集しました)

4

2 に答える 2

1

を使用できますurl_for(:controller => "youtube_controller", :action => "youtubeTokenPageVideos)。また、Ruby、Rails、および規則についていくつかコメントがありますが、気にしないでください。

Rubyでは、クラスとモジュールにキャメルケースで名前を付けるのが慣習です(あなたclass YoutubeControllerがするように:)が、メソッドはsnake_caseのようにする必要がありますdef youtube_token_page_videos

またinitialize、コントローラーでは絶対に使用しないでください。コントローラーの仕組みなど、Rails の基本について詳しく学ぶことをお勧めします。開始するのに適した場所は、Rails ガイドです: http://guides.rubyonrails.org/action_controller_overview.html。ここでは、例えばについて学ぶことができます。フィルター前。一般的に、Rails の経験がどれくらいあるかはわかりませんが、http://codeschool.comには、Railsの非常に優れた無料の開始コースがあります: http://www.codeschool.com/courses/rails-for-zombies-redux .

于 2013-06-12T09:06:25.907 に答える
1

たとえば、次のように実行できます。

class YoutubeController < ApplicationController
  before_filter :set_route

  def youtube_videos
    #some_code
  end

  def youtube_token_page_videos
    #some_code
  end

  private

  def set_route
    @route = url_for(:controller => :youtube,
                     :action => :youtube_videos,
                     :query => 'Some query')
  end
end

また、この例に一致するようにルートを変更する必要があります。の使用のおかげで、このコントローラーのすべてのアクションに変数が設定されてbefore_filterいます。@route

次の例のように、ルートに名前を付けることもできます。

#routes.rb
 match "youtube/search/videos/:query(/:maxResults)", :to => "Youtube#youtube_videos", :via => :get, :as => :youtube_videos

これを行う場合youtube_videos_path、パスを取得するには、コントローラー/ビューで適切なパラメーターを使用して呼び出す必要があります。

于 2013-06-12T09:03:46.757 に答える