我想在一个对象上实现一个类似的计数器。每次点击“我喜欢”按钮时,我想更新对象的数据库字段。
在控制器show-view中,我放置了以下形式:
<% form_for(@book) do |f| %>
<p>
<% @book.update_like(@book)%>
<%= f.submit "I like" %>
</p>
<% end %>
在book.rb模型中调用update_like方法,如下所示:
def update_like(in_book)
in_book.like_tag = in_book.like_tag + 1;
end
调用update_like方法,但数据库不更新。我不明白出了什么问题。非常感谢任何帮助。
答案 0 :(得分:0)
您需要保存对象
def update_like(in_book)
in_book.like_tag = in_book.like_tag + 1
save
end
但更好的做法是在你的控制器中做到这一点。
答案 1 :(得分:0)
你不知道ruby on rails的概念;)
你不能这样做,你必须调用一个控制器方法来更新数据库记录。
您正在寻找的是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:Rails 3.0中不再支持link_to_remote !!
Gruess
西蒙;)