2010-09-08 69 views
0

中定義的方法我想在對象上實現類似計數器。每次'我喜歡'按鈕被點擊我想更新對象的數據庫字段。使用form_for寫入數據庫並在

在控制器顯示視圖我置於以下形式:

<% form_for(@book) do |f| %> 
<p> 
    <% @book.update_like(@book)%> 
    <%= f.submit "I like" %> 
</p> 
<% end %> 

的update_like方法被稱爲在book.rb模型和看起來像這樣:

def update_like(in_book) 
    in_book.like_tag = in_book.like_tag + 1;  
end 

的update_like梅索德被稱爲,但數據庫不更新。我不明白髮生了什麼事。任何幫助深表感謝。

回答

0

你不知道紅寶石在軌道上的概念;)

你不能做這種方式,你必須調用控制器方法來更新數據庫記錄。

你在找什麼是link_to_remote(這不會使用Rails工作3 !!)

看一看:http://apidock.com/rails/ActionView/Helpers/PrototypeHelper/link_to_remote

所以你創建一個控制器,讓我們說「CommentsController」並添加

控制器:

像 「like_it」

然後一切可能看起來像行動

class CommentsController < ApplicationController 

    def like_it 

    @book = Book.find(params[:id]) 
    @book.update_like 

    render :nothing => true 

    end 

end 

型號:

class Book < ActiveRecord::Base 

    def update_like 
    self.like_tag += 1 
    self.save 

    end 

end 

您認爲:

link_to_remote "I like it!!", :url => { :controller => 'comments', :action => 'like_it', :id => placeCommentIDHere }, :complete => 'alert('You liked it!!');' 

我看着你的個人資料,看到你從瑞士太!也許你說德語,如果你這樣做,你應該閱讀這本書(它是免費的!):http://openbook.galileocomputing.de/ruby_on_rails/

PS:link_to_remote不再支持Rails 3.0!

Gruess

西蒙)

+0

非常感謝,是的,你說得對,我還沒有完全掌握了Rails的概念,但我得到它;-)感謝 – doemsche 2010-09-09 08:47:29

0

你需要保存你的對象

def update_like(in_book) 
    in_book.like_tag = in_book.like_tag + 1 
    save 
end 

但更好的初步實踐是這樣做,在你的控制器。