Saya perlu memiliki beberapa tombol kirim.
Saya memiliki formulir yang membuat instance Contact_Call.
Satu tombol membuatnya seperti biasa.
Tombol lain membuatnya tetapi harus memiliki nilai yang berbeda: nilai atribut dari default, dan juga perlu menyetel atribut pada model yang berbeda, tetapi terkait yang digunakan dalam pengontrol.
Bagaimana aku melakukan itu? Saya tidak dapat mengubah rute, jadi apakah ada cara untuk mengirim variabel lain yang diambil oleh [: params]?
Dan jika saya melakukannya, apa yang harus saya lakukan di pengontrol, menyiapkan pernyataan kasus?
ruby-on-rails
ruby
form-submit
Timothy T.
sumber
sumber
Jawaban:
Anda dapat membuat beberapa tombol kirim dan memberikan nilai yang berbeda untuk masing-masing:
Ini akan menghasilkan:
Di dalam pengontrol Anda, nilai tombol yang dikirimkan akan diidentifikasi oleh parameter
commit
. Periksa nilai untuk melakukan pemrosesan yang diperlukan:Namun, ingatlah bahwa ini akan menghubungkan pandangan Anda dengan pengontrol yang mungkin tidak terlalu diinginkan.
sumber
Ada juga pendekatan lain, menggunakan atribut formaction pada tombol kirim:
Kode tetap bersih, karena tombol buat standar tidak memerlukan perubahan apa pun, Anda hanya memasukkan jalur perutean untuk tombol khusus:
sumber
Sebagai alternatif, Anda dapat mengenali tombol mana yang ditekan untuk mengubah nama atributnya.
Ini sedikit tidak nyaman karena Anda harus memeriksa keberadaan kunci params daripada hanya memeriksa
params[:commit]
nilai: Anda akan menerimaparams[:a_button]
atauparams[:b_button]
bergantung pada yang mana yang ditekan.sumber
Solusi serupa dengan yang disarankan oleh @ vss123 tanpa menggunakan permata apa pun:
Perhatikan bahwa saya menghindari menggunakan nilai dan menggunakan nama input sebagai gantinya karena nilai tombol kirim sering diinternasionalkan / diterjemahkan. Juga, saya akan menghindari penggunaan ini terlalu banyak karena akan dengan cepat mengacaukan file rute Anda.
sumber
Kami menyelesaikannya menggunakan kendala lanjutan di rel.
Idenya adalah memiliki jalur yang sama (dan karenanya dinamai rute & tindakan yang sama) tetapi dengan batasan perutean ke tindakan yang berbeda.
CommitParamRouting
adalah kelas sederhana yang memiliki metodematches?
yang mengembalikan nilai true jika parameter komit cocok dengan atribut contoh yang diberikan. nilai.Ini tersedia sebagai permata commit_param_matching .
sumber
Pertanyaan lama, tetapi karena saya telah menghadapi situasi yang sama, saya pikir saya akan memposting solusi saya. Saya menggunakan konstanta pengontrol untuk menghindari perbedaan antara logika pengontrol dan tombol tampilan.
Dan kemudian dalam tampilan:
Dengan cara ini teks hanya berada di satu tempat - sebagai konstanta di pengontrol. Namun, saya belum mencoba mencari cara untuk melakukan ini.
sumber
Saya memiliki sejumlah variabel tombol kirim pada formulir saya berkat nested_form_fields, jadi hanya menggunakan nama saja tidak cukup bagi saya. Saya akhirnya memasukkan bidang input tersembunyi dalam formulir dan menggunakan Javascript untuk mengisinya ketika salah satu tombol kirim formulir ditekan.
sumber