[ruby-on-rails] Rails 4에서 attr_accessible은 어떻게 사용됩니까?
attr_accessible
내 모델에서 더 이상 작동하지 않는 것 같습니다.
Rails 4에서 대량 할당을 허용하는 방법은 무엇입니까?
답변
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
.
답변
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
답변
사용할 수있다
params.require(:person).permit(:name, :age)
person이 Model 인 경우, person_params 메소드에서이 코드를 전달하고 create 메소드 또는 else 메소드에서 params [: person] 대신 사용하십시오.
답변
Rails 5 업데이트 :
gem 'protected_attributes'
더 이상 작동하지 않는 것 같습니다. 그러나 줘 :
gem ‘protected_attributes_continued’
시도.
답변
1) 애플리케이션의 Gemfile에 다음 줄을 추가하여 Rails 4.0을 처리 할 수 있도록 Devise를 업데이트하십시오.
gem 'devise', '3.0.0.rc'
그런 다음 다음을 실행하십시오.
$ bundle
2) 이전 기능 attr_accessible
을 레일스 4.0 에 다시 추가
attr_accessible
이것을 사용 하고 주석 처리하지 마십시오.
이 줄을 응용 프로그램의 Gemfile에 추가하십시오.
gem 'protected_attributes'
그런 다음 다음을 실행하십시오.
$ bundle