2013-12-17 16 views
7

Ben strong_params kullanıyorum ve bir nesneyi geçmek için oluşturmaya çalışıyorum. İki sorum var.Harika ActiveModel :: ForbiddenAttributesError

  1. Soruna hangi özniteliğin neden olduğunu nasıl anlarsınız?
  2. Aşağıdaki kodda nelerin eksik?

Hata ile başlayalım, günlük bana hiçbir şey anlatmıyor. Sadece espri olsun diye

ActiveModel::ForbiddenAttributesError in JobsController#create 

, burada çok faydalı görmüyorum günlüğü geçerli:

Started POST "/jobs" for 127.0.0.1 at 2013-12-17 22:03:59 +0000 
Processing by JobsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"Ohq4lVqPVMpjzbZwCfJNYBL78TAcoC0WZLSmpCzMD3k=", "job"=>{"job_title"=>"Junior Rails Developer", "job_description"=>"A new position getig nsomethfins lansnana", "languages"=>["", "Rails", "Ruby"], "country_code"=>"AO", "job_type"=>"Full-Time", "job_salary"=>"30000", "job_level"=>"Junior"}, "commit"=>"Create Job"} 
    User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1 
Completed 500 Internal Server Error in 8ms 

ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError): 

mantıklı, ama sonra bakarsak benim oluşturun:

def create 
    binding.pry 
    @job = Job.new(job_params) 

    respond_to do |format| 
     if @job.save 
     format.html { redirect_to @job, notice: 'Job was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @job } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @job.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Strong_params:

def job_params 
     params.require(:job).permit(:job_title, :job_level, :job_description, :job_salary, 
            :country_code, :job_type, :state, :languages => []) 
    end 

Esasen ilgileniyorum haystack hatası içinde bir iğne gibi göründüğü için sorunun nerede geleceğini bulmak için. Eğer günlük dosyasında

+0

Yerel sunucunuzu yeniden başlattınız mı? – ChrisBarthol

+1

Hah, sadece kontrol ediyorum. Dillerin üzerinden bakmak, günlükte bir karma olarak gösteriliyor. Değiştirmeyi deneyin: dillere diller: [] veya: languages ​​=> [] kodunuzla aynı sözdizimini sürdürmek için – ChrisBarthol

+0

İzin verdiğiniz tüm nitelikler için modelde attr_accessible tanımlı mı var? – usha

cevap

2

o uygulama oluşturmak elde edeceği parametreleri göstermektedir:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"Ohq4lVqPVMpjzbZwCfJNYBL78TAcoC0WZLSmpCzMD3k=", "job"=>{"job_title"=>"Junior Rails Developer", "job_description"=>"A new position getig nsomethfins lansnana", "languages"=>["", "Rails", "Ruby"], "country_code"=>"AO", "job_type"=>"Full-Time", "job_salary"=>"30000", "job_level"=>"Junior"}, "commit"=>"Create Job"} 

Öncelikle her parametre, güçlü parametreler tanımında listelenen emin olmanız gerekir. Sonra her bir parametrenin doğru tip olduğundan emin olun.

:parameter   #accepts a single entry 
:parameter => [] #accepts a hash 
:paramters_attributes: [:firstattribute, :secondattribute] #accepts nested parameters 

Dilleriniz parametresi günlüğüne bir karma olarak gösteriyor, ama sadece ana kadar: İzin verilen parametrelerde dilleri. Hash kabul etmek için parametreyi değiştirmek sorunu çözmelidir.

:languages => [] 

Ayrıca, bu blog yazısı örnekle bazı güçlü parametreleri göstererek yararlıdır: Eğer izinsiz anahtarlarını içeren bir parametre karma kitle atamak çalıştığınızda http://blog.sensible.io/2013/08/17/strong-parameters-by-example.html

+0

Sunucu yeniden başlatıldı Scalar Değerleri kullanarak çalıştı ancak yine de aynı hatayı alıyorum, bu size inanılmaz geribildirim vermeyen Rails genellikle karşılaştığım tek hatadır. Hatayı başka nasıl bulabilirim. –

+0

Rails 4 kullanıyor musunuz? – ChrisBarthol

+0

Evet, ben rayları kullanıyorum 4 –

0

Bu hata ortaya çıkar. Sizin job_params yönteminiz, permit numaralı çağrıda belirtilen anahtar/değerleri içeren bir hash değerini döndürür, böylece her şey iyi olmalıdır ...

Hata, gönderilen kod bölümünde gerçekleştiğinden emin misiniz? Tek olası yer, @job = Job.new(job_params) hattı olacak, backtrace'de belirtilen bu hat mı? Değilse, komple backtrace'i gönderir misiniz? Hata bir filtre ya da gözlemci ya da böyle bir şey olması gerektiği için ...

1

Muhtemelen bu durumda geçerli değil ama Rails 4 ile sorun türü vardı, ancak sadece oluşturma eylemi ile. Geliştirme günlüğündeki tam yığın izlemesi, CanCan'a ve erişim denetimi için kullandığım yetenek modeline bazı referanslar gösterdi.

Ben denetleyici üst kısmında önerildiği şekilde load_and_authorize_resource kullanarak başladı, ama bunu kaldırıldı ve sadece 'uzun eli' her eylemi izinli zaman parametreleri ile sorun ortadan kayboldu.

İlgili konular