Saya memiliki pengontrol laporan dengan beberapa tindakan, satu untuk setiap jenis laporan.

Saya berencana untuk membuat mereka rute seperti ini:

/laporan/:jenis_laporan

Saya ingin fragmen string report_type digunakan sebagai nama pengontrol sehingga saya dapat memiliki satu rute untuk menangani semuanya, seperti ini:

  get 'reports/:rpt_type' => "reports#:rpt_type"

...itu akan menyelesaikan ini, sebagai contoh:

  get 'reports/song_performers' => 'reports#song_performers'

Apakah ini mungkin dan jika iya, bagaimana?

0
Keith Bennett 5 Juli 2020, 00:54

2 jawaban

Dari rails panduan

Anda dapat mengarahkan ulang jalur apa pun ke jalur lain menggunakan pembantu pengalihan di router Anda

Jadi, Anda dapat menggunakan metode redirect seperti di bawah ini:

get '/reports/:rpt_type', to: redirect('/reports/%{rpt_type}')

Dalam metode ini, rpt_type harus berupa nama tindakan. Jika tidak, aplikasi akan gagal. Jadi metode ini berisiko. Mungkin juga ada risiko keamanan.

Saya pikir Anda harus menentukan rute satu per satu. Anda dapat menggunakan rute pengumpulan. Sebagai contoh:

resource :reports do
  collection do
    get 'song_performers'
    get 'foo'
    get 'boo'
    ..
  end
end
0
demir 4 Juli 2020, 23:22

Saya akan menangani ini di controller, bukan di file routes.rb:

# reports_controller.rb
def show
  send(params(:rpt_type))
end

private
def song_performers
  # do stuff
end

def other_type
  # do other stuff
end

# in routes.rb
get 'reports/:rpt_type' to: 'reports#show'
0
Les Nightingill 5 Juli 2020, 04:14