1

我有一个像 Routine 和 RoutineContent 这样的模型,用于
在 Routine.rb中进行本地化

Class Routine < ActiveRecord::Base
  has_many :routine_contents, dependent: :destroy
  accepts_nested_attributes_for :routine_contents, reject_if: proc {|attributes| attributes['title'].empty?}
end

并在 RoutinesContent

class RoutineContent < ActiveRecord::Base
  belongs_to :routine
  validates_presence_of :title
end

在新的 Routine 动作中,我为语言添加了 RoutineConten 字段。如果一个对象中的标题为空,则该对象将被拒绝。

当我去编辑动作时,我这样做

def set_routine_contents
    contents = @routine.routine_contents.group_by {|content| content.lang}
    if contents['ru'].nil?
      @routine.routine_contents << RoutineContent.new(lang: 'ru')
    end
    if contents['en'].nil?
      @routine.routine_contents << RoutineContent.new(lang: 'en')
    end
end

在此 Rails INSERT INTO 表中的 emty 对象之后结束,为什么?我怎样才能禁用它?谢谢

4

2 回答 2

1

解决方案

def set_routine_contents
    contents = @routine.routine_contents.group_by {|content| content.lang}
    if contents['ru'].nil?
      @routine.routine_contents.build(lang: 'ru')
    end
    if contents['en'].nil?
      @routine.routine_contents.build(lang: 'en')
    end
end

使用构建方法。通过 << 添加到数组是个坏主意

于 2012-12-19T18:23:42.290 回答
0

has_manyroutine_id用表中的外键实现关联routine_contents

因此,将新的 RoutineContent 添加到您的 Routine 需要在 Routine 中确定要写入的主键,routine_id如果尚未保存,则会导致 Routine 保存。

于 2012-12-19T18:14:06.087 回答