3

我正在构建一个字典应用程序,其中我有一些使用连接模型链接到一些单词的概念。我有一个表格来编辑每个概念,我可以在其中编辑它的单词,向它添加新单词或将现有单词与之关联。

我正在使用accepts_nested_attributes_forand update_attributes,但这仅适用于已经关联的单词或新创建的单词。对于以前未关联的现有单词,ActiveRecord::RecordNotFound (Couldn't find Word with ID=4 for Concept with ID=1000)当 ActiveRecord 在连接模型上运行选择时,我会收到这样的错误。

这是我的模型:

class Word < ActiveRecord::Base
  attr_accessible :notes, :text, :grammar_tag_list

  has_many :semantic_relations, :dependent => :destroy
  has_many :concepts, :through => :semantic_relations
end

class Concept < ActiveRecord::Base
  attr_accessible :meaning_tag_list, :words_attributes

  has_many :semantic_relations, :dependent => :destroy
  has_many :words, :through=> :semantic_relations, :order => 'knowledge_id ASC'

  accepts_nested_attributes_for :words, :reject_if => lambda { |w| w[:text].blank? }
end

class SemanticRelation < ActiveRecord::Base
  belongs_to :word, :inverse_of => :semantic_relations
  belongs_to :concept, :inverse_of => :semantic_relations
end

我已经在我的概念控制器中使用以下方法(之前调用它update_attributes)来管理它,但这似乎是一种非常肮脏的方法。没有任何适当的方法可以实现这一目标吗?

def check_words
  current_ids = @concept.word_ids
  new_ids = params[:concept][:words_attributes].map do |w|
    id = w[1][:id].to_i
    unless id == 0
      unless current_ids.include? id
        id
      end
    end
  end
  @concept.word_ids = current_ids + new_ids unless new_ids.blank?
end
4

0 回答 0