Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 模型约束-每个帖子用户只能投票一次_Ruby On Rails_Ruby On Rails 4_Cancan - Fatal编程技术网

Ruby on rails 模型约束-每个帖子用户只能投票一次

Ruby on rails 模型约束-每个帖子用户只能投票一次,ruby-on-rails,ruby-on-rails-4,cancan,Ruby On Rails,Ruby On Rails 4,Cancan,我想限制用户对帖子投赞成票或反对票,每个用户只能对每个帖子投一票。在创建新关系之前,我必须检查用户是否对帖子进行了投票 我已经在使用CanCan进行其他限制,比如“用户只能编辑自己的帖子”,但这种情况有所不同,所以我想要最佳实践。在向模型添加唯一性验证后,我应该通过CanCan还是仅在控制器中实现上述规则(“每个帖子和用户一票”)?对我来说,这两种方法听起来都不一样,这是应该在模型层IMO中执行的验证。对我来说,这不是CanCan作业。粗略回顾一下这个问题,我的感觉是我会在模型中创建一个谓词方法

我想限制用户对帖子投赞成票或反对票,每个用户只能对每个帖子投一票。在创建新关系之前,我必须检查用户是否对帖子进行了投票


我已经在使用CanCan进行其他限制,比如“用户只能编辑自己的帖子”,但这种情况有所不同,所以我想要最佳实践。在向模型添加唯一性验证后,我应该通过CanCan还是仅在控制器中实现上述规则(“每个帖子和用户一票”)?

对我来说,这两种方法听起来都不一样,这是应该在模型层IMO中执行的验证。

对我来说,这不是CanCan作业。粗略回顾一下这个问题,我的感觉是我会在模型中创建一个谓词方法,并从我的角度调用它

def votable?
  if blahblahblag
    true
  else
    false
  end
end
在(haml)视图中:


像这样的事。。。只是一个粗略的草图,但对我来说,这可以保持控制器干净,并在我认为它属于的模型中进行检查(这是根据Logan的评论/回答)。

我已经在模型中进行了验证。但是如果用户不能,我不想显示链接来投票,所以我必须再次检查该功能。问题是,我应该在cancan中加入一个规则(这样我就可以在视图中使用can?,还是应该在controller和view中添加直接条件?
- if model_name.votable?
  = cool_markup_tag