Lon*_*Guy 1 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2
基本上我有一个列出最近10个微博的页面.每个帖子都有一个类似按钮.单击此类按钮时,我的数据库中的likes表会更新.
喜欢表:
+----+------------+--------------+-------------------------+-------------------------+---------+
| 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 |
+----+------------+--------------+-------------------------+-------------------------+---------+
Run Code Online (Sandbox Code Playgroud)
用户必须只能使用一次微博.我可以通过一些jquery/js来实现这一点,通过显示一个不同的按钮,当需要微博时,它指向一个破坏路径.
但有没有办法做这个服务器端呢?像不允许通过任何必要的手段多次使用微博?因此,如果我要进入rails控制台并尝试手动像我已经喜欢的微博那样它将无法工作,因为它会看到我已经喜欢微博?
喜欢型号:
class Like < ActiveRecord::Base
belongs_to :likable, :polymorphic => true
attr_accessible :likable_id, :likable_type, :user_id
end
Run Code Online (Sandbox Code Playgroud)
Micropost模型:
class Micropost < ActiveRecord::Base
belongs_to :user
has_many :likes, :as => :likable
end
Run Code Online (Sandbox Code Playgroud)
喜欢控制器:
class LikesController < ApplicationController
def create
micropost = Micropost.find(params[:micropost])
like = micropost.likes.build(:user_id => current_user.id)
like.save
end
end
Run Code Online (Sandbox Code Playgroud)
喜欢形式:
<%= form_tag likes_path, :remote => true, :class => "like_micropost" do %>
<%= hidden_field_tag :micropost, micropost.id %>
<%= submit_tag '', :class => "likeMicropostSubmit" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
我之前尝试过这个没有运气:
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
Run Code Online (Sandbox Code Playgroud)
亲切的问候
# in Like class
validates_uniqueness_of :user_id, :scope => [:likable_id, :likable_type]
Run Code Online (Sandbox Code Playgroud)
这样,您在尝试不止一次的时候会遇到验证错误.
归档时间: |
|
查看次数: |
1134 次 |
最近记录: |