ReactJS + Rails: HABTM отсутствует в атрибутах и ​​поэтому не может быть сохранен

Я участвую в создании приложения ReactJS (реакция на рельсы) + 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-реакции в качестве форм, где я использовал и изменил реакцию выбора в качестве формы с множественным выбором, чтобы соответствовать требованиям отображения Formsy.

Следующие данные отправляются из ReactJS через.post('/sras'). 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
}

Проблема / ошибка, которую я не могу понять, это когда я создаю новый Sra, включающий в себя имя и номер X Hrfiles через приложение ReactJS, и публикую 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' был создан оболочкой params в Rails. Несмотря на то, что между двумя моделями, Sra и Hrfile, есть связь, где я могу вызвать @ sra.hrfiles, чтобы получить принадлежащие Hrfiles, я все еще не могу понять, что параметр hrfile_ids обернут в JSON.

1 ответ

Это автоматически делается ActionController. Подробнее здесь: http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html

hrfile_ids может быть не включен, потому что Rails ожидает список идентификаторов, а не список объектов с id: X,

Вы можете использовать strong_params следующим образом: params.require(:sra).permit(:name, hrfile_ids: [])

Другие вопросы по тегам