- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我的 Rails 应用程序中有一个点赞系统,允许用户点赞 Pin 图。但我想限制一个 Pin 只能投票一次的能力。
app/controllers/pins_controller.rb
def upvote
@pin = Pin.find(params[:id])
@pin.votes.create
redirect_to(pins_path)
end
app/models/pin.rb
class Pin < ActiveRecord::Base
belongs_to :user
has_many :votes, dependent: :destroy
has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }
has_attached_file :logo, :styles => { :medium => "300x300>", :thumb => "100x100>" }
end
app/config/routes.rb
resources :pins do
member do
post 'upvote'
end
end
我不确定如何实现它,因为我试图实现一个只允许用户投票一次的系统,这不是我想要的,我希望他们只能对“PIN”投票一次。我知道 acts_as_votable gem 提供此功能,但由于我没有使用它,所以我想知道是否有一种方法可以在我自己的代码中实现它。
有什么想法吗?
更新:此方法每个图钉只允许投一票。查看@Ege 解决方案
让它与这个一起工作:
def upvote
@pin = Pin.find(params[:id])
if @pin.votes.count == 0
@pin.votes.create
redirect_to(pins_path)
else flash[:notice] = "You have already upvote this!"
redirect_to(pins_path)
end
end
最佳答案
您选择了 beautifulcoder 的答案作为正确答案,但您应该意识到它可能不正确,如果您是 Rails 的新手,它可能并不明显。
您说一个 Pin 图应该只有一票,但大概您的意思是它应该每个用户有一票,例如,每个用户应该只能给一个 Pin 图点赞一次。这就是投票机制通常的工作方式。
根据 beautifulcoder 的回答,如果我给一个 Pin 投票,你将无法给它投票,因为你的 Controller 会计算 Pin 上的票数,返回 1(因为我给它投票)并阻止你给它投票。此外,它会闪烁一条消息说你已经投票了,而你还没有!
如何解决这个问题?幸运的是,Rails 使这变得 super 简单。你的投票实际上是一个变相的加入模型。它在用户和 pin 之间建立关系(即关联)。用户可以对 pin 进行投票,用户也可以对 pin 进行投票。换句话说,投票“连接”用户和引脚!您需要做的是利用 ActiveRecord Associations 来定义这种关系。 .
您的 Pin 图模型将添加此关联:
class Pin < ActiveRecord::Base
has_many :votes, dependent: :destroy
has_many :upvoted_users, through: :votes, source: :user
...
end
这允许您执行诸如 @pin.upvoted_users
之类的操作,并获取对该 pin 投赞成票的用户列表。如果您希望能够通知 pin 所有者,那就太好了!
您还想向您的用户模型添加反向关联:
class User < ActiveRecord::Base
has_many :votes, dependent: :destroy
has_many :upvoted_pins, through: :votes, source: :pin
...
end
然后像这样更改投票模型:
class Vote < ActiveRecord::Base
belongs_to :user
belongs_to :pin
validates_uniqueness_of :pin_id, scope: :user_id
end
最后在你的 Controller 中,你会做:
def upvote
@pin = Pin.find(params[:id])
if @pin.votes.create(user_id: current_user.id)
flash[:notice] = "Thank you for upvoting!"
redirect_to(pins_path)
else
flash[:notice] = "You have already upvoted this!"
redirect_to(pins_path)
end
end
瞧!您现在有了一个解决方案,用户可以在其中为项目投票,但每个项目只能投票一次。
关于ruby-on-rails - rails : Allow users to upvote only once a pin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24596651/
我正在 Angular js和sails.js(node.js框架)之间的cors问题上挣扎 我尝试修复错误:XMLHttpRequest无法加载http://localhost:1337/en/au
我在我的应用程序中动态创建一个 iframe,结果如下所示: 这样的沙箱配置是否安全(特别是允许将 iframe 内容视为来自同一来源)? 最佳答案 正如 Namey 评论的那样,allow-sam
突然,似乎没有更改我的网络应用程序中的任何内容,我在 Chrome 中打开它时开始收到 CORS 错误。我尝试添加 Access-Control-Allow-Origin: *标题。然后我得到这个错误
我正在使用 Ionic Framework 开发应用程序。 在后端,我为 api 编写了一个 Flask 应用程序,如下所示: @API.route("/saverez",methods=["POST
我正在尝试从 onesignal api 发送 POST 请求 代码 axios({ method: 'post', url: 'https://onesignal.com/api/v1/no
我一直在寻找一些类似的问题来寻找答案,但我找不到。我有一个带有 express 的 node.js 服务器: app.use(function(req, res, next) { res.head
我使用 Google Cloud Functions 创建了一个 API 端点,并试图从 JS 获取函数中调用它。 我遇到了我很确定与 CORS 或输出格式有关的错误,但我不确定发生了什么。其他一些
当我尝试从我的 Angular 6 应用程序访问 Webhdfs 时,我收到如下所示的错误。在我看来,我几乎尝试了所有方法,包括更改 core-site.xml 和 hdfs-site.xml 中的设
我刚刚学习 ajax 和 cors 一些东西,现在我想知道 chrome 插件“allow-control-allow-origin”是如何工作的。 当我尝试执行正常的 ajax 请求时,控制台显示错
我正在努力理解如何允许用户在列表中创建新记录,但只允许创建者更新他们自己的帖子。 例如。以下结构: post { post1: { author: "user1"
我们的网络上有 2 个内部(内联网)Windows 服务器,仅适用于本地网络。在 server1 上安装了 Spark,我们可以在其中查询 Jabber 信息,如下所示: http://server1
所以在 routing.yml 中我定义了以下路由,以便编辑和删除特定设置: 路由.yml: settings.editDefaults: path: settings/{id}/d
我哪里出错了 title $.get("http://api.angel.co/1/tags/1654/startups?callback=aaa", function(data
首先,对您可能犯的语法错误表示歉意。我的英语不是很好。 我是 Spring 新手,我正在尝试创建基本身份验证安全性。 我正在尝试配置一个端点具有公共(public)访问权限,而其他端点则具有用户访问权
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: NULL in MySQL (Performance & Storage) 如果出现以下情况,您是否强烈建议取消选中
我正在尝试将我的一个网站中的内容加载到另一个网站中: $('#include-from-outside').load('http://lujanventas.com/plugins/banne
这里出了什么问题? OPTIONS https://twitter.com/oauth/request_token 401 (Unauthorized) jsOAuth-1.3.4.js:483 XM
allow-control-allow-origin : * header 存在于 API 响应中,但浏览器仍显示错误。网络 403 错误。 这是来自 API 的示例响应 header : Acces
在 Go 中制作 slice 时的 capacity 参数对我来说意义不大。例如, aSlice := make([]int, 2, 2) //a new slice with length and
Gitlab 保护分支中“允许推送”和“允许 merge ”是什么意思 最佳答案 引用 Gitlab Documentation here Using the "Allowed to push" an
我是一名优秀的程序员,十分优秀!