У меня есть приложение rails, в котором пользователь создает новое задание, а на job/new _form
у меня есть пользователь, который вводит информацию для Компании, в которой находится Иов.Rails - создать объект в базе данных из атрибутов вложенных параметров
Задание в базе данных просто дата она была создана, пользователь, который создал его, и через дополнительные внешние ключи к таблицам, как компании, Contact, на строительную площадку и т.д.
A Company has_many
рабочих мест и вакансии belongs_to
a Компания в моем заявлении.
Итак, прежде чем я смогу сохранить задание в базе данных, я должен сначала сохранить новую компанию, чтобы затем я смог ее первичным ключом перехватить и поместить ее в нужный внешний ключ для заданий company_id
.
У меня есть все, возвращаясь правильно в Params хэш следующим образом:
>> params
=> {"utf8"=>"✓", "authenticity_token"=>"NiQO7Wlq87h3+YM//yIEMnctVKectfmZBb74suFOCcmg7g4YyCmGo2OiciOd3VuRDR52tKoE0v9nq1LYoTqHOQ==", "job"=>{"date"=>"2016-09-04 16:06:49 -0700", "user_id"=>"1", "company_id"=>"", "subcontractor_id"=>"", "jobsite_id"=>"", "companies"=>{"name"=>"Test Company", "phone"=>"(530)111-2222", "street"=>"3177 testing st", "city"=>"cameron park", "state"=>"ca", "zip"=>"95682", "email"=>"[email protected]", "website"=>"testcompany.com"}}, "commit"=>"Create Job", "controller"=>"jobs", "action"=>"create"}
>>
И я могу получить доступ к информации о компании с params[:job][:companies]
Так что моя теория, в контроллере Работа в def create
, прежде чем я позвоню @job.save
, я должен сначала сделать @company.new(company_params)
и @company.save
, чтобы я мог сохранить компанию, а затем захватить ее первичный ключ из базы данных.
Но мне нужно немного помочь с этим.
Есть ли у кого-нибудь советы?
Edit:
Это пример из моего _form,
<%= f.fields_for @company do |company| %>
<div class="field">
<%= company.label :name %>
<%= company.text_field :name %>
</div>
Внутри контроллера Работа у меня,
def new
@job = Job.new
@company = Company.new
end
def create
@job = Job.new(job_params)
@company = Company.new(params[:job][:company])
Job.rb имеет
accepts_nested_attributes_for :company
И параметры:
def job_params
params.require(:job).permit(:date, :user_id, :company_id, :subcontractor_id, :jobsite_id, :company_attributes => [:name, :phone, :street, :city, :state, :zip, :email, :website])
end
Когда я представить свою форму, атрибуты возвращаются в company
вместо company_attributes
, так что это говорит мне «Самовольная параметр: компания.»
Способ, который у меня установлен, @job
не выполняет функции @job.company.build
, они не вложены таким образом. Компания является своим собственным столом и компания может иметь много рабочих мест, и все задания можно сделать, это выполнить @job.company
Именно поэтому мне нужно создать компанию первой, так что я могу получить его первичный ключ, а затем сказать @job.company_id = @company.id
Надеюсь, это упростит ситуацию.
Я использую fields_for в form_tag, но это будет только оказывать поля, если Я использую «fields_for: компании». Всюду, где я использую «nested_attributes_for: company» и «.permit (..., company_attributes [...])» Так что в диспетчере заданий он кричит на меня, говоря «Неопределенный параметр: компании» и i не знаю, как исправить эту проблему, которая, похоже, исходит из form_tag –
@CodyPritchard, разместите свою форму, действие вашего контроллера и разрешенные параметры. Ваша проблема заключается в отправке '' компании ': {...} 'в ваших параметрах вместо' 'company_attributes": {...} '. Причина, по которой эти поля не отображались, заключается в том, что вам нужно отправить новую компанию с новым заданием (т. Е. '@ Job.company.build'). – fbelanger
обновлено сообщение –