0

私は ReactJS (react-on-rails) + Rails アプリケーションの構築に携わっています。私自身は (まだ) ReactJS 開発者ではありませんが、ReactJS が選ばれた後、プロジェクトに参加しました。

私の問題は、投稿リクエストの作成および編集を介してReactからRailsに送信されるパラメーターに関するものです。この場合の私のモデル:

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 は Formsy-react をフォームとして使用します。ここでは、Formsy のマッピング要件を満たすために、react-select を複数選択フォームとして使用および変更しました。

次のデータは、React の .post('/sras').send(data) を介して ReactJS から送信されています。

{
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
}

私が理解できない問題/バグは、ReactJSアプリケーションを介して名前とX個のHrfilesを含む新しいSraを作成し、JSONを投稿するときです(上記のように)。これは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}}

ReactJS アプリは、たとえば "hrfile_ids"=>["2", "1"] を転送しますが、ParamsWrapper (私が推測する) は 'hrfile_ids' を属性として認識しないため、名前のみが保存されます。

ここで何が欠けているのか誰にも分かりますか?

他のコードブロックや詳細が必要な場合はお知らせください。あなたが助けてくれることを願っています:)事前に感謝します-

編集

「sra」オブジェクトがRailsのparams ラッパーによって作成されたことを指摘してくれた Jesper に感謝します。Sra と Hrfile という 2 つのモデルの間には関係があり、@sra.hrfiles を呼び出して所属する Hrfile を取得できますが、JSON にラップされた hrfile_ids パラメータを取得する方法はまだわかりません。

4

1 に答える 1

0

これは ActionController によって自動的に行われます。詳細はこちら: http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html

hrfile_idsRails は を含むオブジェクトのリストではなく、ID のリストを想定しているため、含まれない可能性がありますid: X

次のように strong_params を使用できます。params.require(:sra).permit(:name, hrfile_ids: [])

于 2016-04-05T09:45:21.013 に答える