Rails 5 не может храниться в базе данных - PullRequest
6 голосов
/ 20 января 2020

Я не могу сохранить запись в базе данных, следующий мой код

Параметры формы

enter image description here

Контроллер

def create
    @sales_dailystatus_info = SalesDailystatusInfo.new(sales_dailystatus_info_params)
    @sales_dailystatus_info.user_id = current_user.id
    @project = @sales_dailystatus_info.project
    respond_to do |format|
      if @sales_dailystatus_info.save
        byebug
        format.js{}
        format.html{redirect_to dashboard_project_path(@project)}
      else
        format.js{}
        format.html{render nothing: true}
      end
    end
end

def sales_dailystatus_info_params
    params.require(:sales_dailystatus_info).permit(:user_id, :project_id, :sales_task_id, 
    :task_time, :description)
end

Модель

class SalesDailystatusInfo < ActiveRecord::Base    
     belongs_to :project
     belongs_to :user, optional: true
     belongs_to :sales_task
     validates :user_id, :sales_tasks_id, :task_time, presence: true
end

Вы можете видеть на скриншоте, что я получил откат при сохранении.

Пожалуйста, помогите мне.

Редактировать:

Я внес изменение, теперь я перебираю параметры и удаляю сильные параметры. Ниже мой код

def create
    params[:sales_dailystatus_info].values.each do |sales_dailystatus_info|

    @sales_dailystatus_info = SalesDailystatusInfo.create(
                    project_id: sales_dailystatus_info[:project_id],
                    sales_tasks_id: sales_dailystatus_info[:sales_task_id],
                    task_time: sales_dailystatus_info[:task_time],
                    description: sales_dailystatus_info[:description],
                    user_id: current_user.id
    );  
    byebug       
  end      

  respond_to do |format|
    format.js{}
    format.html{render nothing: true}
    end
end

все еще не может его сохранить. Дайте мне ошибку Задача продажи должна существовать.

Ответы [ 5 ]

4 голосов
/ 21 января 2020

Глядя на ваши журналы, кажется, что вы отправляете два SalesDailyStatusInfo:

{... 'sales_daily_status_info" => { "0" => {"project_id" => ...}, "1" => { "project_id" => ... } } }  

Вы не разрешаете эти ключи в вашем дезинфицирующем устройстве params, следовательно, Unpermitted parameters: :0, :1. В результате вы не вносите в белый список любые отправляемые вами параметры, а параметры ha sh пусты, проверки вашей модели не пройдены.

Чтобы это работало, вам нужно отправить только один проект на время или l oop через ваши параметры, чтобы создать оба SalesDailyStatusInfo.

Добавьте код формы внешнего интерфейса к вашему вопросу, если вам нужна дополнительная помощь.

Надеюсь, это поможет!

1 голос
/ 28 января 2020

Я решил это, изменив название поля.

Я изменяю поле sales_tasks_id в sales_daily status_info на sales_task_id.

Мне нужно единственное имя внешнего ключа вместо множественного числа.

1 голос
/ 26 января 2020

Поскольку вы присваиваете project_id и sales_task_id, эти записи должны быть созданы до того, как вы сможете создать запись sales_dailystatus_info. Ошибка, которую вы получаете, говорит, что вы не создали sales_task.

1 голос
/ 26 января 2020

Почему вы проверяете :user_id и ставите optional: true одновременно? Также в вашей модели у вас есть проверки :sales_task_id (belongs_to association default validation on Ruby on Rails version >= 5.0) и :sales_tasks_id. И в вашем контроллере я вижу :sales_tasks_id ключ, но не вижу :sales_task_id, поэтому вы получаете Sales task must exist error. Удалите ненужные проверки :user_id и :sales_task_id, верните сильные параметры и все будет хорошо

1 голос
/ 20 января 2020

Похоже, ваша запись недействительна. Вы подтверждаете наличие user_id, но оно не отправлено. Вместо рендеринга ничего попробуйте сделать рендеринг @sales_dailystatus_info.errors.messages

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