2013-08-07 124 views
0

我的代码是这样的为什么我得到未定义的方法“保存”错误?

def footstamp 
    if current_user 
     @user = User.find(params[:id]) 
     @tracking = Tracking.where(:user_id => current_user.id, :target_user_id => @user.id) 

     if @tracking 
      @tracking.accessed_at = Time.now 
      @tracking.save   
     else 
      @tracking = Tracking.new 
      @tracking.user_id = current_user.id 
      @tracking.target_user_id = @user.id 
      @tracking.accessed_at = Time.now 
      @tracking.save   
     end 
    end  
end 

然后我得到这个错误

NoMethodError (undefined method `save' for []:ActiveRecord::Relation): 

回答

2

用途:

@tracking = Tracking.where(:user_id => current_user.id, :target_user_id => @user.id).first 
+0

这就是它!谢谢!! – MKK

+0

@MKK如果解决了问题,请将其标记为正确。 –

+0

我会肯定的。它说等待6分钟:) – MKK

1

您收到此错误,因为你的方法的结果,不返回Tracking ,但是一组Trackings

要么你引入更多的条件来匹配只有一个Tracking,或者使用first方法或遍历结果,

首先使用:

@tracking = Tracking.where(:user_id => current_user.id, :target_user_id => @user.id).first 

迭代:

Tracking.where(:user_id => current_user.id, :target_user_id => @user.id).each do |tracking| 
     if tracking 
      tracking.accessed_at = Time.now 
      tracking.save   
     else 
      tracking = Tracking.new 
      tracking.user_id = current_user.id 
      tracking.target_user_id = @user.id 
      tracking.accessed_at = Time.now 
      tracking.save   
     end 
end 
+0

谢谢:)但这一次,我会给阿曼,因为他先发布正确的答案功劳。无论如何,尽管如此! – MKK

0

优化答案,

def footstamp 
    if current_user 
     @user = User.find(params[:id]) 
     @tracking = Tracking.where(:user_id => current_user.id, :target_user_id => @user.id).first_or_create 
     @tracking.accessed_at = Time.now 
     @tracking.save   
    end  
end 

更有用的方法here

相关问题