无法使用rails 4更新记录

时间:2013-12-05 16:30:48

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

我想更新控制器中的记录。我尝试使用save或update_attributes,但它不起作用。

我的代码是:

  @relation = Relation.where(:realtor_id => @message.realtor_id, :user_id => current_user.id)
  puts @relation.inspect
  @relation.save  

puts relation.inspect给我带来了好的对象。 我收到了这条消息

NoMethodError (undefined method `save' for #<ActiveRecord::Relation::ActiveRecord_Relation_Relation:0x007fe6d6872fe8>):

我对“update_attributes”也有同样的问题。

我有3个型号:用户,房地产经纪人和关系。我使用“has_many:through”在User和Realtor之间通过Relation创建链接。

我的目标是在保存之前添加relation.status = "something"。 当我添加@relation.status = "test"时,我得到:

NoMethodError (undefined method `status=' for #<ActiveRecord::Relation []>):
i think, it's a stupid error, but i cant solve it :)

我不在用户,房地产经纪人或消息控制器中,而是在另一个控制器(消息控制器)中

感谢您提前

3 个答案:

答案 0 :(得分:1)

@relation = Relation.find(params[:id])
@relation.users.create(current_user) #or build and then .save

答案 1 :(得分:0)

我找到答案......

我用:   @relation = Relation.where(:realtor_id => @message.realtor_id, :user_id => current_user.id).take

代替:  @relation = Relation.where(:realtor_id => @message.realtor_id, :user_id => current_user.id)

答案 2 :(得分:0)

只是为了让你了解为什么会这样......如果你现在还不知道的话。

.where()每次都会响应一个数组。即使只有1个结果,它仍然在一个数组中,所以它不是你的模型的一个实例。 .find()以对象回应。

因此,.where()可以使用take或.where(...).first -or- .take -or- [0]

使用.find(params[:id]),它会更简洁,只返回您正在寻找的记录,如果不存在则返回错误。 .where()如果无法找到您要查找的内容,则不会出错。这是另外要记住的事情。