2016-04-05 16 views
0

Ben bir ReactJS (tepki raylar üzerinde) + Raylar uygulamasının bir parçasıyım. Ben ReactJS geliştiricisi değilim (henüz), ancak ReactJS seçildikten sonra projeye alındı.ReactJS + Raylar: HABTM öznitelikte değildir ve bu nedenle kaydedilemez

Sorunum, posta istekleri oluşturmak ve düzenlemek için React'tan Rails'e gönderilen parametrelerle ilgilidir. Bu durum için Benim modeller:

class Hrfile < ActiveRecord::Base 
    mount_uploader :attachment, AttachmentUploader 
    has_and_belongs_to_many :sras 
    ... 
end 

class Sra < ActiveRecord::Base 
    ... 
    has_and_belongs_to_many :hrfiles 
    ... 

    validates :name, presence: {message: "Please input a name"} 
end 

ReactJS ben kullandım formları olarak Formsy-tepki ve tepki seçim Formsy haritalama gereksinimlerine kadar yaşamak için multiselect form olarak modifiye kullanır.

Aşağıdaki veri ReactJS gönderiliyor

içinden en Tepki .post ('/ SRA'lara') göndermek (veri):. Ben çözemiyorum

{ 
active:null 
address:null 
asset_id:null 
assetother:null 
brand_id:null 
city:null 
conclusion:"Test conclusion" 
country_id:null 
enddate:null 
hrfile_ids:["2","1"] 
indicator_deteroriation:null 
ireport_ids:null 
name:"Test assessment" 
organisation_id:null 
region_id:null 
reviewdate:null 
startdate:null 
treatment:null 
user_id:null 
} 

sorun/hata olduğunda ben ReactJS uygulaması yoluyla bir isim ve X sayısı Hrfiles içeren yeni bir Sra oluşturun ve JSON'u (yukarıda verildiği gibi) gönderin. Bu, Rails:

Started POST "/sras" for 127.0.0.1 at 2016-04-05 16:29:07 +0800 
Processing by SrasController#create as JSON 
    Parameters: {"name"=>"Test assessment", "organisation_id"=>nil, "brand_id"=>nil, "user_id"=>nil, "asset_id"=>nil, 
"startdate"=>nil, "reviewdate"=>nil, "address"=>nil, "city"=>nil, "region_id"=>nil, "country_id"=>nil, "assetother"=>nil, "enddate"=>nil, "active"=>nil, "treatment"=>nil, 
"indicator_deteroriation"=>nil, "conclusion"=>"Test conclusion", "ireport_ids"=>nil, "hrfile_ids"=>["2","1"], 
"sra"=>{"name"=>"Test assessment", "organisation_id"=>nil, "country_id"=>nil, "user_id"=>nil, 
"startdate"=>nil, "enddate"=>nil, "reviewdate"=>nil, "active"=>nil, "city"=>nil, "address"=>nil, "asset_id"=>nil, "assetother"=>nil, 
"indicator_deteroriation"=>nil, "conclusion"=>"Test conclusion", "brand_id"=>nil, "region_id"=>nil}} 

tarafından alınır. ReactJS uygulaması, örn. "hrfile_ids" => ["2", "1"], ancak ParamsWrapper (şüpheliyim) 'hrfile_ids'i bir öznitelik olarak tanımaz ve bu nedenle isim yalnızca kaydedilir.

Burada neleri kaçırdığım hakkında bir fikrim var mı?

Başka bir kod bloğuna veya ayrıntıya ihtiyacınız varsa bildirin. 'Sra' nesne Rails params wrapper tarafından yaratıldı işaret ederek Jesper için

Teşekkür

DÜZENLEME - önceden :) Teşekkür yardımcı olabilir umuyoruz. Hrfiles'e sahip olmak için @ sra.hrfiles'i arayabileceğim iki model Sra ve Hrfile arasında bir ilişkim olsa da, JSON'a sarılmış hrfile_ids parametresini elde etmeyi hala anlayamıyorum.

cevap

0

Bu, ActionController tarafından otomatik olarak yapılır. Daha fazla bilgi için bkz .: http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html

hrfile_ids, Rails kimliklerin listesini id: X numaralı nesnelerin listesi olarak beklemediğinden dahil olmayabilir.

Böyle strong_params kullanabilirsiniz: params.require(:sra).permit(:name, hrfile_ids: [])

+0

sayesinde bu @thejspr için! Şu anda arayarak bir hack yapacağım: 'params.require (: sra) .merge (hrfile_ids: params [" hrfile_ids "])' SrasController # sras_params içinde :) – sstubben