ReactJS + Rails:HABTM不在属性中,因此无法保存

时间:2016-04-05 08:42:29

标签: ruby-on-rails ruby-on-rails-4 react-rails

我参与构建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中

1 个答案:

答案 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: [])