我参与构建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(&#39; / sras&#39;)从ReactJS发送的.send(data):
{
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应用确实转发,例如&#34; hrfile_ids&#34; =&gt; [&#34; 2&#34;,&#34; 1&#34;],但ParamsWrapper(我怀疑)无法识别&#39; hrfile_ids&#39;因此,只保存属性和名称。
任何人都知道我在这里缺少什么?
如果您需要任何其他代码块或详细信息,请与我们联系。希望你能帮忙:)提前致谢 -
修改
感谢Jesper指出了&#39; sra&#39;对象是由Rails中的params wrapper创建的。即使我在两个模型Sra和Hrfile之间存在关系,我可以调用@ sra.hrfiles来获取所属的Hrfiles,但我仍然无法弄清楚将hrfile_ids参数包装到JSON中
答案 0 :(得分:0)
这是由ActionController自动完成的。点击此处:http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html
可能不会包含 hrfile_ids
,因为Rails希望ID列表不是id: X
的对象列表。
您可以使用这样的strong_params:params.require(:sra).permit(:name, hrfile_ids: [])