首页 > 解决方案 > 尝试在 ruby​​ rails 中保存记录时出错

问题描述

我有一个表单,用户可以在其中向程序添加不同的练习。此表单包含两个提交按钮:

  1. 用于保存程序并将其分配给另一个用户
  2. 将程序保存为模板,以便以后再次使用

在我扩展第二个提交按钮之后,第一个操作运行良好。有时它可以工作(例如在清除缓存之后),有时不能,它会抛出如下错误:

activerecord.errors.models.exercise.attributes.source_id.taken

我还没有找到 .taken 的确切含义,但我认为 Rails 认为它​​必须是唯一的?但事实并非如此。

第二次提交:当我尝试将程序另存为模板时出现错误

translation missing: de.activerecord.errors.messages.record_invalid

当我尝试保存模板时:

  if params[:Template]
   @template = ProgramTemplate.new(template_params(:create))              
    if @template.save!
      flash[:success] = {'title' => I18n.t('alerts.6C.success.title'), 'text' => I18n.t('alerts.6C.success.message')}
      render :new                
    else

在此之后,我检查了@template 的外观,检查一切看起来都很好。当我运行 @template.invalid?(:name) 时,它显示为 true,但 .inspect 显示该名称确实存储为字符串。

我的模板参数

  def template_params(method = :update)
   nested_attributes = [:source_id, :series, :repetitions, :break, :sort_order]
   nested_attributes += [:id, :_destroy] if method == :update

   params.require(:program).permit(:account_id, :description, :account_patient_id, :name, :goal, :frequency, :duration, exercises_attributes: nested_attributes)
  end

@template的型号代码:

class ProgramTemplate < ActiveRecord::Base
  #belongs_to :patient
  #belongs_to :program
  belongs_to :account
  #belongs_to :account_patient

  has_many :exercises, dependent: :destroy
  accepts_nested_attributes_for :exercises, allow_destroy: true
  #has_many :program_sessions, dependent: :destroy

  # accepts_nested_attributes_for :exercises, reject_if: lambda { |e| e[:published].blank? }, allow_destroy: true

  validates :name, presence: true
  validate :min_no_of_exercises

标签: ruby-on-railsrubyruby-on-rails-4

解决方案


推荐阅读