2013-08-29 1 views
0

Я пытаюсь сделать простую операцию импорта, чтобы импортировать некоторую информацию csv с помощью resque.Resque не может обновлять объекты - rails

Работа работает, но когда я изменить объект, кажется, как его разрушенный или что-то ...

После запускает эту работу, он находит пользователя с первой лин ... потом на @ 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 не определен метод `имя =» для ноля: NilClass

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

ответ

0

Я использовал smarter_csv для отправки «chunk», который был хешем. Я думаю, когда redis сериализует хэш, вам нужно символизировать его, прежде чем вы начнете его использовать снова.

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

Работы после символизации!