0

私はこれを渡すことができません:

  %w[home help about contact].each do |page|
    get :controller => 'static_pages', :action => page
  end

私はこのコードをリファクタリングしようとしていました:

  get 'static_pages/home'
  get 'static_pages/help'
  get 'static_pages/about'
  get 'static_pages/contact'

助けてください。

4

2 に答える 2

1
static_pages = %w(home help about contact).map {|p| p.to_sym}

resources :static_pages, only: static_pages do
  static_pages.each do |page|
    get page, on: :collection
  end
end

与える

$ rake routes
   home_static_pages GET /static_pages/home(.:format)       static_pages#home
   help_static_pages GET /static_pages/help(.:format)       static_pages#help
   about_static_pages GET /static_pages/about(.:format)     static_pages#about
   contact_static_pages GET /static_pages/contact(.:format) static_pages#contact

only: static_pagesCRUD ルートを生成しないために使用します。

于 2012-09-07T18:20:15.493 に答える
0

元のコードが気に入らない場合は、次のようになります。

root to: 'static_pages#home'

match '/help',    to: 'static_pages#help'
match '/about',   to: 'static_pages#about'
match '/contact', to: 'static_pages#contact'

同じルートを取得したい場合は、次のような単純なループを使用できます。

root to: 'static_pages#home'

%w(help about contact).each do |page|
   get "#{page}" => "static_pages##{page}"
end

ただし、私には、これを正当化するのに十分なリファクタリングとは思えません。

編集

コードのエラーを修正するには、次を使用します。

%w(home help about contact).each do |page|
  get "/#{page}", :controller => 'static_pages', :action => page
end

への有効な引数については、 のAPI をmatch確認してくださいget

于 2012-09-08T05:33:14.037 に答える