답변:
Rails 4는 이제 강력한 매개 변수를 사용합니다 .
이제 속성이 컨트롤러에서 보호됩니다. 이것은 예입니다 :
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
attr_accessible
더 이상 모델 을 설정할 필요가 없습니다.
accepts_nested_attributes_for
accepts_nested_attribute_for
강력한 매개 변수와 함께 사용하려면 허용 할 중첩 속성을 지정해야합니다.
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
키워드는 설명이 필요하지만 Rails Action Controller 안내서에서 강력한 매개 변수 에 대한 자세한 정보를 찾을 수 있습니다 .
참고 : 계속 사용 attr_accessible
하려면에 추가 protected_attributes
해야합니다 Gemfile
. 그렇지 않으면, 당신은 직면하게됩니다 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을 선호한다면 Rails 4에서도 사용할 수 있습니다. gem처럼 설치해야합니다 :
gem 'protected_attributes'
그 후 Rails 3과 같은 모델에서 attr_accessible을 사용할 수 있습니다
또한 대량 할당을 처리하고 중첩 된 객체를 저장하기 위해 양식 객체를 사용하는 가장 좋은 방법이라고 생각합니다. 또한 protected_attributes gem을 사용할 수 있습니다
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
attr_accessible
제거해야 한다고 말하지 않았습니다 . 보관하면 어떻게 되나요?