2014-07-23 81 views
0

因此,對於所有正在執行的意圖和目的,我都有相同的操作。然而,一件作品和另一件作品沒有。沒有將字符串隱式轉換爲數組

DB設置

add_column :cards, :score, :integer, :default => 0 
add_column :cards, :comments, :integer, :default => 0 

=> Card(id: integer, user_id: integer, event: text, created_at: datetime, updated_at: datetime, score: integer, comments: integer) 

表決控制器(這一個工程)

def create 
@vote = Vote.where(:card_id => params[:vote][:card_id], :user_id => current_user.id).first 
if @vote 
    @vote.up = params[:vote][:up] 
    @vote.save 
    @card = Card.find(params[:vote][:card_id]) 
    if @vote.up == true 
    @card.score += 2 
    else 
    @card.score -= 2 
    end 
    @card.save 
else 
    @vote = Vote.new 
    @vote.card_id = params[:vote][:card_id] 
    @vote.user = current_user 
    @vote.up = params[:vote][:up] 
    @vote.save 
    @card = Card.find(params[:vote][:card_id]) 
    if @vote.up == true 
    @card.score += 1 
    else 
    @card.score -= 1 
    end 
    @card.save 
end 
redirect_to :back 
end 

評論控制器(不工作),我得到 「Fixnum對象的隱式轉換爲陣」

def create 
    @comment = Comment.new 
    @comment.message = params[:comment][:message] 
    @comment.card_id = params[:comment][:card_id] 
    @comment.user = current_user 
    @comment.save 
    @card = Card.find(params[:comment][:card_id]) 
    @card.comments += 1 
    @card.save 
    redirect_to :back 
end 

我在這裏錯過了什麼?謝謝大家提前的幫助。

伊恩

回答

3

我猜你還有卡和評論之間的關聯,例如。 Card has_many :comments。你的@card.comments方法現在是不明確的 - 你指的是關聯還是整數的值? Rails正在假設關聯,但你想要整數。

對於這樣的事情,我建議看看計數器緩存http://guides.rubyonrails.org/association_basics.html#belongs-to-association-reference(第4.1.2.3節)。這包括將comments_count字段添加到您的卡模型,並將counter_cache: true添加到從評論到卡的關聯。然後Rails會自動爲你保持計數。

0

@sevenseacat這樣做了。我在睡覺前發佈了這個問題,並且想到了當我試着入睡的時候。我覺得不可能是這樣。感謝您確認我的想法並讓我嘗試它。我正在研究計數器緩存,感謝您提供更好的方向。

Ian

相關問題