레일즈 3 프로젝트의 컨트롤러 코드에서 기능 테스트를 실행할 때 치명적인 오류가 발생했습니다. params
변수는 controller
포함 action
및 ActiveModel 그것에 대해 행복하지 않다 :Rails 3 기능 테스트 : 보호 속성을 지정할 수 없습니다 : 컨트롤러, 동작
# Credential#create (POST)
def create
@credential = Credential.new(params)
# ... controller continues
end
:
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: controller, action
/Users/phooze/.rvm/gems/ruby-1.9.3-p0/gems/activemodel-3.2.1/lib/active_model/mass_assignment_security/sanitizer.rb:48:in `process_removed_attributes'
/Users/phooze/.rvm/gems/ruby-1.9.3-p0/gems/activemodel-3.2.1/lib/active_model/mass_assignment_security/sanitizer.rb:20:in `debug_protected_attribute_removal'
/Users/phooze/.rvm/gems/ruby-1.9.3-p0/gems/activemodel-3.2.1/lib/active_model/mass_assignment_security/sanitizer.rb:12:in `sanitize'
/Users/phooze/.rvm/gems/ruby-1.9.3-p0/gems/activemodel-3.2.1/lib/active_model/mass_assignment_security.rb:228:in `sanitize_for_mass_assignment'
/Users/phooze/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/attribute_assignment.rb:75:in `assign_attributes'
/Users/phooze/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/base.rb:495:in `initialize'
/Users/phooze/Documents/rails-app/app/controllers/credentials_controller.rb:40:in `new'
응용 프로그램 호출 (오류가 발생한) "새로운"방법, 코드가이다
마지막으로, 내 테스트 케이스 :
test "should create credential" do
assert_difference('Credential.count', 1) do
post :create, { :fid => "foobarbaz", :credentials_hash => "f00ba7f00ba7", :uid => "10023", :cid => "342" }
end
assert_response :created
end
만 FID를 포함하는 "별도의"매개 변수 해시에 내 컨트롤러 코드를 변경, 자격 증명 s_hash, uid 및 cid가 작동합니다. 나는 Rails가 "훌륭"하고 테스트를위한 부가 가치를 제공하려고 노력하고 있음을 확신하지만, 문제를 일으키는 것으로 보인다.
해결 방법에 대한 권장 사항은 무엇입니까?
감사합니다. params [: credential]을 사용하지 않는 이유는 웹 API 호출 (컨트롤러에 "새로운"메소드가 없음)이며 일부 매개 변수는 쿼리 문자열이므로 "credential [uid]"isn 쿼리 문자열에 비합리적이지는 않지만 처음 생각한 것은 아닙니다. :) – makdad