attr_accessible
tampaknya tidak lagi berfungsi dalam model saya.
Apa cara untuk memungkinkan penugasan massal di Rails 4?
sumber
attr_accessible
tampaknya tidak lagi berfungsi dalam model saya.
Apa cara untuk memungkinkan penugasan massal di Rails 4?
Rails 4 sekarang menggunakan parameter kuat .
Melindungi atribut sekarang dilakukan di controller. Ini adalah sebuah contoh:
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
Tidak perlu diatur attr_accessible
dalam model lagi.
accepts_nested_attributes_for
Untuk menggunakan accepts_nested_attribute_for
dengan parameter yang kuat, Anda harus menentukan atribut bersarang mana yang masuk daftar putih.
class Person
has_many :pets
accepts_nested_attributes_for :pets
end
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
# ...
private
def person_params
params.require(:person).permit(:name, :age, pets_attributes: [:name, :category])
end
end
Kata kunci cukup jelas, tetapi untuk berjaga-jaga, Anda dapat menemukan informasi lebih lanjut tentang parameter kuat dalam panduan Pengendali Tindakan Rails .
Catatan : Jika Anda masih ingin menggunakan attr_accessible
, Anda harus menambahkan protected_attributes
ke Gemfile
. Jika tidak, Anda akan dihadapkan dengan RuntimeError
.
attr_accessible
perlu dihapus. Apa yang akan terjadi jika kita menyimpannya?RuntimeError in MicropostsController#index 'attr_accessible' is extracted out of Rails into a gem. Please use new recommended protection model for params(strong_parameters) or add 'protected_attributes' to your Gemfile to use old one.
Jika Anda lebih suka attr_accessible, Anda bisa menggunakannya di Rails 4 juga. Anda harus menginstalnya seperti permata:
setelah itu Anda bisa menggunakan attr_accessible di model Anda seperti di Rails 3
Juga, dan saya pikir itu adalah cara terbaik - menggunakan objek formulir untuk berurusan dengan penugasan massal, dan menyimpan objek bersarang, dan Anda juga dapat menggunakan permata protected_attributes dengan cara itu
sumber
Kita bisa menggunakan
di mana orang adalah Model, Anda dapat meneruskan kode ini pada metode person_params & digunakan sebagai ganti params [: orang] dalam membuat metode atau metode lain
sumber
Pembaruan untuk Rails 5:
sepertinya tidak berfungsi lagi. Tapi berikan:
permata 'protected_attributes_continued'
mencoba.
sumber
1) Perbarui Rencanakan agar dapat menangani Rails 4.0 dengan menambahkan baris ini ke Gemfile aplikasi Anda:
Kemudian jalankan:
2) Tambahkan fungsi lama
attr_accessible
lagi ke rel 4.0Coba gunakan
attr_accessible
dan jangan berkomentar.Tambahkan baris ini ke Gemfile aplikasi Anda:
Kemudian jalankan:
sumber