0

我正在尝试做一个简单的导入后台作业,以使用 resque 导入一些 csv 信息。

工作运行,但一旦我编辑一个对象,它似乎被毁了或什么的......

一旦此作业运行,它会找到具有第一个 lin 的用户......然后在 @user.name 它没有设置,然后它无法保存。我可以在我的控制台中运行这段代码,它工作得很好,只是在 resque 中被破坏了。是否存在不能使用对象或使用 resque 写入数据库的限制?到目前为止浪费了 6 个小时,尝试了无数的事情......请帮忙。

def self.perform(chunk)
    chunk.each do |i|
        @user = User.where(:email => i[:email].to_s).first_or_initialize
        @user.name = i[:name].to_s
        if @user.save
            puts @user.email
            entity = Entity.find_by_email_domain(@user.email)
            eur = EntityUser.where(:entity_id => entity.id, :user_id => @user.id).first_or_initialize
            if eur.save
                puts "Start: BLARGITY End"
                topic = Topic.where(:number => i[:course_number].to_s).first_or_initialize
                eu = TopicUser.where(:topic_id => topic.id, :user_id => user.id, :role_i => 1).first_or_initialize
            else
                eu = TopicUser.where(:topic_id => topic.id, :user_id => user.id).first_or_initialize
            end
        eu.save
        end
    end

 end

end

我只是尝试像这样进行查找,您现在可以看到错误..

NoMethodError: nil:NilClass 的未定义方法 `name='

    @user = User.find_by_email(i[:email])
    puts "sdfdsf"
    @user.name = i[:name]
    puts @user.name
4

1 回答 1

0

我正在使用 smarter_csv 发送“块”,这是一个哈希。我猜当redis序列化一个哈希时,你需要在再次开始使用它之前对其进行符号化。

chunk.each do |i|
        i.symbolize_keys!
        @user = User.find_by_email(i[:email])
        @user.name = i[:name]

象征它后工作!

于 2013-08-29T13:27:57.880 回答