我正在尝试执行以下操作:
1)从我的投票表中获取当前评论ID的所有投票(我有此工作)
2)从评论表中获取值“得分”。两个Active Record Queries几乎完全相同(我相信正确)。这是我的这两个表(投票和评论)和我的评论控制器的架构。
3)我需要在我的评论模型中定义的方法中使用“得分”这个值。
ActiveRecord::Schema.define(version: 20131207224402) do
create_table "comments", force: true do |t|
t.integer "user_id"
t.integer "question_id"
t.text "comment"
t.integer "upvotes"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "score"
end
create_table "votes", force: true do |t|
t.integer "comment_id"
t.integer "user_id"
t.integer "upvote"
t.integer "downvote"
t.datetime "created_at"
t.datetime "updated_at"
end
end
这是我的评论模型
class Comment < ActiveRecord::Base
belongs_to :question
belongs_to :user
has_many :votes
def total_score
total_votes = Vote.where(:comment_id => self.id)
current_score = Comment.where(:id => self.id) ##This is the query that is not working properly.
testing = current_score.score
total_score ||= 0
up = total_votes.inject(testing) {|sum, v|
v.upvote ||= 0
sum + v.upvote
}
down = total_votes.inject(testing) {|sum,v|
v.downvote ||= 0
sum + v.downvote
}
up.to_i + down.to_i
end
end
为什么我不能使用.score来获取查询返回的变量的得分值?
Ex:current_score.score ='some number'
我需要这个数字来设置我的注入方法中的当前“总和”。
以下是我遇到的错误:
ActionView::Template::Error (undefined method `score' for #<ActiveRecord::Relation::ActiveRecord_Relation_Comment:0x007fbfcc7e9260>):
1: json.array!(@comments) do |comment|
2: json.extract! comment, :user_id, :question_id, :comment, :upvotes, :id, :score, :created_at
3: json.url comment_url(comment, format: :json)
4: json.comment_score comment.total_score
5: end
app/models/comment.rb:14:in `total_score'
app/views/comments/index.json.jbuilder:4:in `block in _app_views_comments_index_json_jbuilder__2724241289986061767_70230927807240'
app/views/comments/index.json.jbuilder:1:in `_app_views_comments_index_json_jbuilder__2724241289986061767_70230927807240'
Rendered /Users/ScottDAlessandro/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.5ms)
Rendered /Users/ScottDAlessandro/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.3ms)
Rendered /Users/ScottDAlessandro/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (13.2ms)
答案 0 :(得分:1)
我认为你的问题是current_score = Comment.where(:id => self.id)
正在返回一个数组。尝试将该代码更改为:
current_score = Comment.find(self.id)
以下是有关find
与where
的stackoverflow讨论的链接:
https://stackoverflow.com/a/9574674/2925963