通过post_id和ip_address验证创建 - Ruby on Rails

bga*_*oci 0 ruby ruby-on-rails

我使用Ruby on Rails创建了一个博客应用程序,其中包括对帖子进行投票的能力.用户可以单击投票并在投票表中创建记录.我现在试图限制同一个人多次投票.

class Post
 has_many :votes
end


class Vote
 belongs_to :post
end
Run Code Online (Sandbox Code Playgroud)

创建投票记录时,我使用VotesController传递:post_id并在视图中使用隐藏字段传递ip_address(两者都传递到投票表).我想知道是否有一种方法可以向投票模型添加验证,以搜索post_id是否有与请求投票的人匹配的ip_address.

我曾尝试使用validates_uniqueness_of:ip_address但限制用户对任何帖子进行投票.我只想限制用户对他们已经投票的特定帖子进行投票.

有没有办法通过验证来做到这一点?

Eim*_*tas 5

试试这个:

class Vote
  belongs_to :post
  validates_uniqueness_of :ip_address, :scope => [:post_id]
end
Run Code Online (Sandbox Code Playgroud)

这将验证关于帖子的唯一性.用户将无法为同一帖子投票两次.

在其他新闻中 - 您可以从中获取远程IP地址request.remote_ip.这是代理IP地址的包装器,因此您不必担心HTTP_X_FORWARDED_FOR和类似的标头.