【问题标题】:Rails: If views are 'dumb', from where do I tell my database that a piece of content has been viewed?Rails:如果视图是“愚蠢的”,我从哪里告诉我的数据库已经查看了一段内容?
【发布时间】:2014-09-22 14:44:28
【问题描述】:

我正在 Rails 中整合一个电子学习模块,用于跟踪用户的进度。我希望在查看内容时更新进度,并且每个内容都有一个索引 id,该索引对应于更新的进度数组的索引。

我已经弄清楚(感谢stackoverflow)如何将数组序列化为要存储在数据库中的字符串,并且我已经正确初始化了数组;它正在更新我真的不知道如何实施的进度。我是 Rails 的新手,我真的不知道代码应该放在哪里。

我需要为每条内容制作一个模型吗?向数据库传达一条内容(即链接)已被点击的最佳方式是什么?在我看来,这应该发生吗?

如果有人能指点一下,那就太好了。

【问题讨论】:

    标签: ruby-on-rails database views


    【解决方案1】:

    这应该在处理这些内容的控制器上完成。您可以假设在执行控制器操作时单击了指向该内容的链接。获取当前用户并将这段内容添加到您的 seen_pages 数组(或任何名称)中。我假设您将在您的 User 类上看到的内容存储在 seen_pages_list 下。此示例还假设您在控制器中自动加载 @your_class。示例:

    class YourClassController < ApplicationController
      def show
        @current_user.seen_page! @your_class.id
    
        #rest of your controller logic
      end
    end
    
    class User < ActiveRecord::Base
      def seen_page!(page_id)
        seen_pages_list.add page_id
        save
      end
    end
    

    如果它不是新的页面视图,您可以让它更智能并且不保存,为什么要浪费查询呢?但正如 Hoare 的格言所说:“过早的优化是万恶之源”

    【讨论】:

    • 我将看到的页面存储在用户上,是的。那么你是说我确实需要每个可点击内容 1 个控制器吗?或者有没有办法使用 1 ContentClass 并用适当的 id 实例化它?如果是这样,我想我不明白该类将在哪里创建。 (我很难看到 Rails 实际上在哪里实例化了任何东西)。或者(提示愚蠢的问题)还有什么我没有得到的吗?
    • 我是说,当前提供这些内容的任何控制器都应该设置您的 seen_pages。现在我不确定你是如何提供内容的,但假设你有一个名为 Page 的模型,你可能还有一个名为 PageController 的控制器,其路由 pages/:page_id 因为它是一个普通资源。假设您展示了一条内容,其中包含路由 pages/1/ 进入您的 PageController#show,您将在那里完成工作。
    • 好的,谢谢。如何确定哪个控制器正在提供内容?如果这是一个愚蠢的问题,我很抱歉,但我只是不知道。例如,我有一个链接到 /presentation (link_to /presentation) 的页面。那会使用哪个控制器?
    • rake routes 在命令行上检查 /presentation 的位置。它会告诉你一个控制器和一个动作。
    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多