1


Routine.rbでローカリゼーションするためのRoutineやRoutineContentのようなモデルがあります

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フィールドを設定します。1つのオブジェクトのタイトルが空の場合、このオブジェクトは拒否されます。

アクションを編集するとき、私はこれを行います

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

このRailsINSERTINTOの後に終了し、テーブル内の空のオブジェクト、なぜですか?どうすれば無効にできますか?ありがとう

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_manyテーブルroutine_id内の外部キーで実装された関連付け。routine_contents

そのため、新しい RoutineContent を Routine に追加するには、Routine で決定された主キーが に書き込む必要がありroutine_id、まだ保存されていない場合は Routine が保存されます。

于 2012-12-19T18:14:06.087 に答える