attr_accessible
artık modelimde çalışmıyor gibi görünüyor.
Rails 4'te toplu atamaya izin vermenin yolu nedir?
attr_accessible
artık modelimde çalışmıyor gibi görünüyor.
Rails 4'te toplu atamaya izin vermenin yolu nedir?
Yanıtlar:
Rails 4 artık güçlü parametreler kullanıyor .
Öznitelikleri korumak artık kontrolörde yapılır. Bu bir örnektir:
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
attr_accessible
Artık modele geçmeye gerek yok.
accepts_nested_attributes_for
accepts_nested_attribute_for
Güçlü parametrelerle kullanmak için, hangi yuvalanmış özniteliklerin beyaz listeye alınması gerektiğini belirtmeniz gerekir.
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
Anahtar kelimeler kendinden açıklayıcıdır, ancak her halükarda, Rails Action Controller kılavuzunda güçlü parametreler hakkında daha fazla bilgi bulabilirsiniz .
Not : Hala kullanmak istiyorsanız attr_accessible
, cihazınıza eklemeniz protected_attributes
gerekir Gemfile
. Aksi takdirde, a RuntimeError
.
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.
Attr_accessible'ı tercih ederseniz, Rails 4'te de kullanabilirsiniz. Gem gibi yüklemelisiniz:
gem 'protected_attributes'
Bundan sonra Rails 3 gibi modellerde attr_accessible kullanabilirsiniz
Ayrıca, ve bu kütle atama ile uğraşmak ve iç içe nesneleri kaydetmek için form nesnelerini kullanarak en iyi yol olduğunu düşünüyorum ve ayrıca korumalı_attributes gem bu şekilde kullanabilirsiniz
class NestedForm
include ActiveModel::MassAssignmentSecurity
attr_accessible :name,
:telephone, as: :create_params
def create_objects(params)
SomeModel.new(sanitized_params(params, :create_params))
end
end
Kullanabiliriz
params.require(:person).permit(:name, :age)
burada kişi Model ise, bu kodu person_params yönteminde geçirebilir ve parametre [: person] yerine create yönteminde veya else yönteminde kullanabilirsiniz.
Rails 5 için bir güncelleme:
gem 'protected_attributes'
artık işe yaramıyor gibi görünüyor. Ama verin:
gem 'korumalı_attributes_continued'
bir deneme.
1) Bu satırı uygulamanızın Gemfile'ına ekleyerek Rails 4.0'ı işleyebilmesi için Düzenlemeyi Güncelle:
gem 'devise', '3.0.0.rc'
Sonra yürütün:
$ bundle
2) attr_accessible
Yine eski işlevselliğini raylara 4.0 ekleyin
Kullanmaya çalışın attr_accessible
ve bunu yorumlamayın.
Bu satırı uygulamanızın Gemfile dosyasına ekleyin:
gem 'protected_attributes'
Sonra yürütün:
$ bundle
attr_accessible
kaldırılması gerektiğini söylemedi . Saklarsak ne olur?