2012-10-25 31 views
1

我试图更新数据库中的一些数据,但我得到这个错误:未定义的方法`is_current”为#:在红宝石<的ActiveRecord ::关系0x38622a8>在轨道上的更新数据

undefined method `is_current' for #<ActiveRecord::Relation:0x38622a8> 

我控制器:

@user = User.where("user_id = #{user_id} and is_current = 1") 

if @user.nil? 
    puts"xxxxxxxxxxxxxxxxxxxxxxxxxxx" 
else 
    @user.is_current = 0 
    @user.to = Time.now 
    @user.save 
end 
+2

将您的用户模型代码 – HungryCoder

+0

和架构用于用户表 – ck3g

回答

5

User.where返回一个数组。之后你需要先说。另外,不要在没有逃避论点的地方使用字符串。您的查询不安全,并且对SQL注入开放。

@user = User.where(user_id: user_id, is_current: 1).first 
+0

完美解决了我的问题。感谢帮助。 –

+2

为了完整起见,你可以使用预先准备的语句,如果你必须使用一个字符串出于某种原因:'User.where('user_id =?和is_current = 1',user_id)' – x1a4

+0

好吧,我会的,感谢您的帮助。 –

1

尝试写在型号查询,这是很好的做法,所以你可以做

@user = User.where("user_id = #{user_id} and is_current = 1") 

在你的模型

@user = User.user_is_current(user_id,1) # two argument 1) user_id and 2) is_current value 

更换

def user_is_current(user_id,is_current) 
    where(user_id: user_id, is_current: is_current) 
end 

它会给数组提供数据,以便您可以编写

@user = User.user_is_current(user_id,1).first 
+0

感谢dipak的建议。 –

相关问题