如何在Rails 4中将嵌套模型与动态查找器相关联

时间:2014-03-15 16:34:36

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

我正在尝试使用CSV中的数据为Rails 4应用程序播放我的数据库。我决定在我的应用程序中创建自己的导入功能。以下是我Film模型中导入功能的示例。在我的CSV中,导演的名字和姓氏与每行中的电影名称相关联。

CSV.foreach(path, :col_sep => ",", :quote_char => "\x00", :headers => true) do |row|
        hash = row.to_hash
      hash.values.each do |value|
        value.strip! unless value.nil? # remove whitespaces around
      end

        unless hash["name"].blank?
            film  = find_or_create_by name: hash["name"]
        unless hash["firstname"].blank? && hash["lastname"].blank?
          film.director = Director.find_or_create_by firstname: hash["firstname"], lastname: hash["lastname"]
        end
      end

    end

我的电影和导演已创建但彼此无关联(即director_id表中的films字段为空。 我认为这一行需要修复:

film.director = Director.find_or_create_by firstname: hash["firstname"], lastname: hash["lastname"]

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

分配film.director时,更改不会自动保留在数据库中,您需要应用以下两种解决方案之一:

director = Director.find_or_create_by(firstname: hash["firstname"], lastname: hash["lastname"])

# Solution #1:
film.update_attributes(director: director)

# Solution #2:
film.director = director
film.save