Проблема с сохранением данных в нескольких моделях из нескольких форм в одном представлении - PullRequest
0 голосов
/ 25 апреля 2019

У меня проблема с сохранением данных из запроса, который был отправлен из нескольких форм в одном представлении. Один из них сохранен, но я не могу получить остальные данные для сохранения во второй модели. Модель Soil имеет ссылки от Иова.

Я прочитал много уроков по сохранению данных из нескольких моделей, но не могу найти решение для этого. Я новичок в программировании на ruby ​​на рельсах.

  def create
    @job = Job.new(job_params)
    if @job.save
      @soil = @job.soils.new()
      @soil.save
      flash[:notice] = 'Added'
      redirect_to @job
    end
  end

  private

  def job_params
    params.require(:job).permit(:name, :samples, :duedate, :soil_attributes => %i[shelf count_samples initials])
  end

    {"utf8"=>"✓",
 "authenticity_token"=>"WRhC3Dffq290lK5u2tnITJWT244ZLlwoAnm/T1tWdw3/UbUUpIOuB0ziclkuMFnIZ8KWZllFZlQrBP/quyb33g==",
 "job"=>{"soil"=>{"initials"=>"AWO", "shelf"=>"A3", "count_samples"=>"4"}, "name"=>"19-35123", "samples"=>"4", "duedate"=>"2019-05-21"},
 "button"=>""}

Модель работы

class Job < ApplicationRecord
      has_many :soils
      before_save :default_value
      validates_presence_of :name, :samples, :duedate
      accepts_nested_attributes_for :soils
      private
      def default_value
        self.archived ||= false
      end
    end

class Soil < ApplicationRecord
  belongs_to :job
end

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Это просто дубликат этого: https://stackoverflow.com/a/12980775/8844929. Я рекомендую вам следовать их советам:

Модель работы /app/models/job.rb:

class Job < ActiveRecord::Base
  has_many :soils
  accepts_nested_attributes_for :soil

в /app/models/soil.rb:

class Soil < ActiveRecord::Base
  belongs_to :job

in app/controllers/jobs_controller.rb:

def create
  @job = Job.create(params[:job])
  if @job.save
    flash[:notice] = 'Added'
    redirect_to @job
  end
end

Поскольку задание принимает вложенные атрибуты для почвы, оно также сохраняет новые объекты почвы (если они передаются).Вероятно, вам придется изменить свою форму в файле html.erb, но это, вероятно, самый чистый способ создания родителя и ребенка в отношениях belongs_to.Вы даже можете обновить объекты почвы с помощью параметров, таких как:

{ job: { name: 'thingy', soil_attributes: { id: '2', shelf: 'A4' } } }

Документацию можно найти здесь: https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

Похоже, что ваши параметры являются реальной проблемой.Ваша форма должна иметь это для создания почвы:

<%= form_for @job, do |f| %>
  .. omitting form fields for job
  <%= f.fields_for :soil do |ff| %>
    .. omitting form field for soil
  <% end %>
  <%= f.submit %>
<% end %>
0 голосов
/ 25 апреля 2019

Похоже, вы связали две модели и это Soil belongs_to Job.Если это правда, вы можете добавить параметры autosave: true к ассоциации belongs_to в модели Soil.

EDIT

Да, теперь, когда я могу видеть ваши модели, это должноделайте то, что вы ищете:

belongs_to :job, autosave: true

Вы также можете добавить dependent: :destroy.Помогает с уборкой:

belongs_to :job, autosave: true, dependent: :destroy
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...