【问题标题】:Allowing users to hide submissions in Rails 3允许用户在 Rails 3 中隐藏提交
【发布时间】:2011-09-04 18:07:52
【问题描述】:

我有一个网站,用户可以在该网站上提交提交内容,所有内容都会显示在主页上。我想在每个提交上放置一个小按钮,上面写着“隐藏”...如果用户单击此链接,他们将不再在网站上的任何地方看到提交。

目前我提交的索引操作很简单:

def index
  @submissions = Submission.order("created_at DESC")
end

我的计划是创建一个像这样隐藏的模型:

rails g model hidden user_id:integer submission_id:integer

然后,当用户隐藏某些东西时,会创建一个隐藏模型实例。然后我必须将我的控制器更新为:

def index
  @submissions = Submission.order("created_at DESC").includes("hidden").where("hiddens.user_id IS NULL")
end

虽然这显然行不通。

我有一个好的数据库架构吗?为了确保不显示隐藏的提交,我能做的最有效的查询是什么?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 model schema


    【解决方案1】:

    你应该有 3 张桌子:

    1. 提交
    2. 隐藏
    3. 用户

    请注意,您有多对多关联。现在,每当用户单击按钮隐藏提交时,您都会在表 Hidden 中创建一个具有正确提交 ID 和用户 ID 的行。然后,在您的控制器中,您可以获取所有没有用户标记为“隐藏”的 id 的提交。

    顺便说一句:请注意,您应该从隐藏中实现反向(以防有人犯了错误或改变了主意0

    【讨论】:

    • 这是我的总体计划。我想我最想弄清楚的部分是进行查询的最佳方式,该查询搜索用户未隐藏的所有提交。
    • @weckersham 我会首先找到用户隐藏的所有提交,然后在第二个查询中使用它来获取 ID 不在的所有提交(result_from_previous_query)。这当然可以在一个带有左外连接的查询中完成,其中 hidden.submission_id 为空。不确定哪种方法效果更好——一个包含 100 个查询的简单循环应该会给你答案:)
    【解决方案2】:

    除非我遗漏了什么,否则我会简单地将“隐藏”属性添加到提交模型(布尔值)。

    当用户点击您的“隐藏”链接时,您将属性设置为 true。

    然后您只需查找标志设置为 false 的提交:

    Submission.where(:hidden => false)
    

    【讨论】:

    • 这里的问题是它需要为每个单独的用户定制。如果我只是在提交模型上将其设为布尔值,它将对所有人隐藏。有意义吗?
    • 是的,我的错。我以为隐藏的动作是由提交的所有者执行的
    • 我很抱歉!我确定我没有正确解释它
    猜你喜欢
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2012-04-01
    相关资源
    最近更新 更多