2013-12-10 98 views
0

我努力做到以下幾點:活動記錄的搜索查詢

1)獲取所有的選票從我的投票表與當前評論的ID(我有這方面的工作)

2)獲取值「評分表「。這兩個活動記錄查詢幾乎是相同的(我相信是正確的)。這是我的Schema for這兩個表(投票和評論)和我的評論控制器。

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以取得該查詢返回變量得分的價值?

例如:current_score.score =「一些號」

我需要這個號碼來設置當前「和」我的注射方法。

這裏是我得到的錯誤:

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) 

回答

1

我覺得你的問題是current_score = Comment.where(:id => self.id)是返回一個數組。試着改變代碼這樣:

current_score = Comment.find(self.id) 

這裏是一個計算器討論環節約findwherehttps://stackoverflow.com/a/9574674/2925963