RoR ActiveRecord条件 - 如何正确访问表中的数据

时间:2014-01-11 19:20:17

标签: ruby-on-rails arrays database activerecord

新的一天,我猜是新的错误。

我有一个“评论”表。如果我打印出@ comments = Comment.all,我会以这种格式从我的数据库中获取数据:

[#<Comment id: 1, commentable_id: nil, commentable_type: nil, user_id: 1, created_at: "2014-01-10 18:11:44", updated_at: "2014-01-10 18:11:44", content: "yolo drake", receiver: nil>, #<Comment id: 2, commentable_id: nil, commentable_type: nil, user_id: 1, created_at: "2014-01-10 18:12:20", updated_at: "2014-01-10 18:12:20", content: "yolo drake", receiver: nil>, #<Comment id: 3, commentable_id: nil, commentable_type: nil, user_id: 1, created_at: "2014-01-10 18:14:07", updated_at: "2014-01-10 18:14:07", content: "schallulaaa udddaa", receiver: "Linda Lamar">, #<Comment id: 4, commentable_id: nil, commentable_type: nil, user_id: 1, created_at: "2014-01-10 18:17:28", updated_at: "2014-01-10 18:17:28", content: "noch ein versuch", receiver: nil>, #<Comment id: 5, commentable_id: nil, commentable_type: nil, user_id: 1, created_at: "2014-01-10 18:18:42", updated_at: "2014-01-10 18:18:42", content: "scdcsvcdf", receiver: nil>, #<Comment id: 6, commentable_id: nil, commentable_type: nil, user_id: 1, created_at: "2014-01-10 18:20:05", updated_at: "2014-01-10 18:20:05", content: "luiscdncdij", receiver: "Miriam Hagen">]

我想得到所有评论,其中“receiver”= aSpecificName AND其中“commentable_type”= offer。

BUT

1)如果我做@ comments.each为了得到每个评论,而不是每个评论数据库对象,它给了我所有评论:

#<Comment:0x007f9ec4cbb488> #<Comment:0x007f9ec4cba9c0> #<Comment:0x007f9ec4cb97a0> #<Comment:0x007f9ec4cc2710> #<Comment:0x007f9ec4cc0d48> #<Comment:0x007f9ec4ccbf90> # (the list goes on same style)

2)如果我做了类似

的事情
@offerpm = Comment.where({ receiver: @user["first_name"], commentable_type: "offer" }), 

它给了我这个:

#<ActiveRecord::Relation:0x007f9ec4dd3c80>

===&GT;这里发生了什么,如何选择我想要选择的内容?

2 个答案:

答案 0 :(得分:1)

试试这个:

Comment.where(receiver: 'aSpecificName', commentable_type: 'Offer')

编辑:

我也看到你几乎回答了你自己的问题! Relation对象是一个类似于数组的对象,您也可以使用each方法:

Comment.where({ receiver: @user["first_name"], commentable_type: "offer" }).each do |comment|
  # do stuff here
end

请务必阅读documentation on the ActiveRecord query interface

答案 1 :(得分:1)

您看到的数字是对象。您已经在选择要选择的内容,即正确的对象。现在你只需要调用方法来查看你想要的字段而不是那些数字。

所以在你的例子中使用接收器,

@offerpm.receiver

@offerpm.commentable_type查看该字段。

希望有所帮助。