RecordInvalid проблемы при использовании field_for, проверка не удалась, даже если свойство существует? - PullRequest
0 голосов
/ 28 марта 2020

Я сейчас работаю над сайтом на Rails 6.0 и Ruby 2.5. Короче говоря, веб-сайт предназначен для того, чтобы связать нуждающегося человека с кем-то, кто может помочь, вместе с описанием необходимой помощи.

Для этого вопроса есть 3 соответствующие модели: person_in_need, district и help. A person_in_need has_many helps и принадлежит к district. help принадлежит_ одному district, district has_many helps.

Ниже приведена форма для регистрации нового person_in_need вместе с help, в котором они нуждаются.

<%= form_with model: @person_in_need, url: persons_in_need_index_path do |form| %>
    <%= form.label :name %>
    <%= form.text_field :name%>
    <br>
    <%= form.label :phone_number %>
    <%= form.phone_field :phone_number %>
    <br>
    <%= form.fields_for :helps do |help_form| %>
        <%= help_form.label :districts_id %>
        <%= help_form.grouped_collection_select :districts_id, State.order(:name), :districts, :name, :id, :name, include_blank: true %>
        <br>
        <%= help_form.label 'What kind of help do you need?' %>
        <%= help_form.select :help_type, options_for_select(Help.help_types.keys), include_blank: true %>
        <%= help_form.label 'Describe' %>
        <%= help_form.text_area :description %>
    <% end %>
    <%= form.submit 'Post' %>
<% end %>

Контроллер

class PersonsInNeedController < ApplicationController
    def new
        @person_in_need = PersonInNeed.new
        @person_in_need.helps.new
    end

    def create
        @person_in_need = PersonInNeed.create!(person_in_need_params)
        @person_in_need.helps.first.person_in_need_id = @person_in_need.id
        if @person_in_need.save
          redirect_to root_path 
        else
          redirect_to new_persons_in_need_path
        end
    end

    private

    def person_in_need_params
      params.require(:person_in_need).permit(:name, :phone_number, helps_attributes: [:help_type, :description, :districts_id])
    end
end

Ниже приведены журналы

Parameters: {"authenticity_token"=>"eUmMHFVFcpRsO7cGzP2nJ/MAkM/Q6IDA/oPUrWNL1bBox53MqGLnAtklO1s6FVppoX3c8E1IADAGND+Q/74FwA==", "person_in_need"=>{"name"=>"Sar", "phone_number"=>"012345", "helps_attributes"=>{"0"=>{"districts_id"=>"Dungun", "help_type"=>"food", "description"=>"need rice"}}}, "commit"=>"Post"}

ActiveRecord::RecordInvalid (Validation failed: Helps district must exist):

Когда я пытаюсь сохранить данные, он возвращает вышеуказанную ошибку в журналах, я подозреваю, что это может как-то связано с тем, как я называю свои объекты в grouped_select_form, но игра с этим не имела никакого эффекта. Я вижу, что в журналах есть район, так почему он говорит, что его не существует? Спасибо за чтение!

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Прочитав документацию по Rails, я добавил validates_presence_of :user в свою модель справки, и это решило проблему.

0 голосов
/ 28 марта 2020

Заменить

<%= help_form.grouped_collection_select :districts_id, State.order(:name), :districts, :name, :id, :name, include_blank: true %>

на

<%= help_form.grouped_collection_select :districts_id, State.order(:name), :districts, :id, :name, :name, include_blank: true %>

РЕДАКТИРОВАТЬ: Не могли бы вы также добавить :id в сильные параметры helps_attributes, как это:

helps_attributes: [:id, :help_type, :description, :districts_id]
...