Ruby on rails ReactJS+;Rails:HABTM不在属性中,因此无法保存
我是构建ReactJS(react on rails)+rails应用程序的一部分。我自己还不是ReactJS开发人员,但在选择ReactJS之后,我被带进了这个项目 我的问题涉及通过创建和编辑post请求从React发送到Rails的参数。 我的案例模型:Ruby on rails ReactJS+;Rails:HABTM不在属性中,因此无法保存,ruby-on-rails,ruby-on-rails-4,react-rails,Ruby On Rails,Ruby On Rails 4,React Rails,我是构建ReactJS(react on rails)+rails应用程序的一部分。我自己还不是ReactJS开发人员,但在选择ReactJS之后,我被带进了这个项目 我的问题涉及通过创建和编辑post请求从React发送到Rails的参数。 我的案例模型: class Hrfile < ActiveRecord::Base mount_uploader :attachment, AttachmentUploader has_and_belongs_to_many :sras
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应用程序创建一个新的Sra时,包括一个名称和X个hrfile,然后发布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_id”=>[“2”,“1”],但是ParamsRapper(我怀疑)没有将“hrfile_id”识别为属性,因此仅保存名称
有人知道我在这里遗漏了什么吗
如果您需要任何其他代码块或详细信息,请告诉我。希望你能帮忙:)提前谢谢-
编辑
感谢Jesper指出“sra”对象是由in Rails创建的。尽管我的模型Sra和Hrfile之间存在关系,我可以调用@Sra.hrfiles来获取所属的Hrfile,但我仍然无法确定如何将Hrfile_ids参数包装到JSON中。这是由ActionController自动完成的。请参阅此处的更多信息:
hrfile\u ID
可能不包括在内,因为Rails期望的是ID列表而不是ID:X的对象列表
您可以使用如下强参数:
params.require(:sra).permit(:name,hrfile\u id:[])
谢谢@thejspr!现在我将通过调用:params.require(:sra).merge(SrasController中的hrfile\u-id:params[“hrfile\u-id”])
sras\u-params:)
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}}