我是构建 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 作为表单,我使用并修改了 react-select 作为多选表单,以满足 Formsy 的映射要求。
以下数据通过 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 个 Hrfile 的新 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' 识别为属性,因此仅保存名称。
有人知道我在这里缺少什么吗?
如果您需要任何其他代码块或详细信息,请告诉我。希望您能提供帮助:)提前致谢-
编辑
感谢 Jesper,指出“sra”对象是由Rails 中的params 包装器创建的。即使我在 Sra 和 Hrfile 这两个模型之间存在关系,我可以在其中调用 @sra.hrfiles 来获取所属的 Hrfile,但我仍然无法弄清楚将 hrfile_ids 参数包装到 JSON 中。