所以我正在制作一个视频游戏评论网站进行练习 - 而我想要完成的想法是:
您只能查看一次视频游戏
BUT
发布有关该游戏的新文章时,您可以编辑和更改您的评论,直到再次发布其他文章。
目前,我有这个逻辑隐藏并显示编辑链接 - 但当然,路线仍处于活动状态。
如果没有添加新文章,如何限制编辑路线?
下面是逻辑,后面是路线。如果您需要其他文件,请告诉我。提前致谢
这种方式的工作方式是 - 如果最后一次新闻对象是在您的评论上次更新后创建的 - 那么您可以看到编辑评论的链接。
<% if @news.last.created_at > preview.updated_at && preview.user_id == current_user.id %>
<p><%= link_to "edit", edit_game_preview_path(@game.id, preview.id) %></p>
<% end %>
的routes.rb
Rails.application.routes.draw do
devise_for :users
root "games#index"
resources :games do
resources :news
resources :reviews, except: [:show, :index]
resources :previews, except: [:show, :index]
end
resources :platforms
resources :genres
end
答案 0 :(得分:2)
如果您希望用户“只审核一次视频游戏”,我建议您在app / models / review.rb(here's more info on validates_uniqueness_of)中进行以下模型验证,此外还要隐藏“编辑” “链接。
validates_uniqueness_of :user_id, scope: :game_id.
您需要限制“修改”页面和“更新”操作以满足您的需求,但我不明白“预览”的位置。
如果您可以解释“预览”,我可以编辑我的答案,但这里是允许用户“编辑和更改他们的评论,直到另一篇文章发布”的代码。
class ReviewsController < ApplicationController
before_filter :restrict_access_modify, :only => [:edit, :update]
...
private
def restrict_access_modify
# Make sure that Reviews.find(params[:id]) isn't repeated.
@review = current_user.reviews.find(params[:id])
redirect_to(:back, notice: "A new article has already need posted") if News.last.id > @review.new_id
end
end
答案 1 :(得分:1)
当没有新闻时我隐藏链接你可以使用下面的代码。此外,无需调用用户的ID并进行比较,您可以直接执行==,如下所示。
<% if !@news.empty? and @news.last.created_at > preview.updated_at && preview.user == current_user %>
<p><%= link_to "edit", edit_game_preview_path(@game.id, preview.id) %></p>
<% end %>