基本上我有一个页面,列出了 10 个最近的微博。每个帖子都有一个赞按钮。单击此赞按钮时,我的数据库中的赞表将更新。
喜欢表:
+----+------------+--------------+-------------------------+-------------------------+---------+
| id | likable_id | likable_type | created_at | updated_at | user_id |
+----+------------+--------------+-------------------------+-------------------------+---------+
| 2 | 5770 | Micropost | 2012-06-09 11:30:55 UTC | 2012-06-09 11:30:55 UTC | 2 |
| 3 | 5770 | Micropost | 2012-06-09 11:42:45 UTC | 2012-06-09 11:42:45 UTC | 2 |
+----+------------+--------------+-------------------------+-------------------------+---------+
用户只能点赞一次微博。我可以使用一些 jquery/js 来实现这一点,方法是在喜欢微博时显示一个指向破坏路径的不同按钮。
但是有没有办法做这个服务器端呢?就像不允许以任何必要的方式多次喜欢微博一样?因此,如果我要进入 Rails 控制台并尝试手动点赞我已经喜欢的微博,它不会工作,因为它会看到我已经喜欢微博?
喜欢的型号:
class Like < ActiveRecord::Base
belongs_to :likable, :polymorphic => true
attr_accessible :likable_id, :likable_type, :user_id
end
微贴模型:
class Micropost < ActiveRecord::Base
belongs_to :user
has_many :likes, :as => :likable
end
喜欢控制器:
class LikesController < ApplicationController
def create
micropost = Micropost.find(params[:micropost])
like = micropost.likes.build(:user_id => current_user.id)
like.save
end
end
喜欢形式:
<%= form_tag likes_path, :remote => true, :class => "like_micropost" do %>
<%= hidden_field_tag :micropost, micropost.id %>
<%= submit_tag '', :class => "likeMicropostSubmit" %>
<% end %>
我以前试过这个没有运气:
class LikesController < ApplicationController
def create
micropost = Micropost.find(params[:micropost])
if micropost.likes.where(:user_id => current_user.id).nil?
like = micropost.likes.build(:user_id => current_user.id)
like.save
end
end
end
亲切的问候