【问题标题】:From php & SQL to Rails & ActiveRecord从 php & SQL 到 Rails & ActiveRecord
【发布时间】:2011-07-27 23:37:11
【问题描述】:

我有一些带有许多表(大约 100 个)的旧数据库,旧系统使用 php 运行,并且对 NLP 中使用的数据进行了如此多的操作。 我有点好奇如何使用 Rails 来完成。我读到 ActiveRecord 对遗留系统没有好处!但是我播种了一些人使用它没有问题,那么为什么有些人会这样呢? 还考虑到以下 php 代码,其中包含许多 If 和 SQL 语句,有些人认为这种情况被认为是典型的数据/数据库任务而不是 OO 之一,因此最好远离 AcriveRecord 或任何其他 ORM。这是真的?如果没有,Rails 的 ActiveRecord 可以轻松完成吗?

假设所有变量都是从网络表单提交的。我们有一些文本要注释,我们必须看看是否有其他用户同意这个提交表单的用户。然后我们将更新同意表。

if ($submitted_id !=""){ 
$sql = "SELECT * FROM annotation WHERE relation_id = $relation_id";
$result = open_query($sql);
while ($row = mysql_fetch_assoc($result)) {
    $user_id = $row["user_id"];
    $line = "";
    $sql = "SELECT * FROM agree WHERE user_id = $user_id AND user_id_agree = $submitted_id LIMIT 1";
    $result = open_query($sql);
    $line = mysql_fetch_array($result, MYSQL_ASSOC);
    if ( $user_id != $submitted_id ) { 
        if ( $line == "" ) { 
            mysql_query ("INSERT INTO agree VALUES ('$user_id' , '$submitted_id', '1', CURRENT_TIMESTAMP)");
        } else { 
        $total = $line["total"];
        $new_total = $total+1;
        mysql_query ("UPDATE agree SET total = $new_total WHERE user_id = $user_id AND user_id_agree = $submitted_id LIMIT 1");
        }
    }
}
}

问候

【问题讨论】:

    标签: php database ruby-on-rails-3 activerecord


    【解决方案1】:

    嗯,使用带有 ActiveRecord 的旧数据库模式会让您失去它的一些优势。例如,Rails 对许多事情采取“约定优于配置”的方法,而 ActiveRecord 继承了这一点。例如,如果您有一个名为 Product 的模型,Rails 假定您的表将被称为“products”。因此,您不必配置表名。这同样适用于外键、URL 约定等。您越愿意让您的应用程序按照 Rails 的工作方式运行,您就会越轻松。如果您的目标不是“构建一个执行 X 的应用程序”,而是“将此应用程序转换为 Ruby 和 ActiveRecord”,那么生成的代码将不会那么清晰或惯用。

    如果您尝试以您所使用工具的常规方式编写应用程序,您可能会因此获得更清晰、更易于维护的代码。

    至于您提供的代码,我并不完全清楚它应该做什么(因为我没有上下文知道“submitted_it”、“user_id_agree”、“annotation”等在你的申请。

    【讨论】:

    • 非常感谢您的回复。我已经更新了我上面的问题。假设所有变量都是从 Web 表单提交的。我们有一些文本要注释,我们必须看看是否有其他用户同意这个用户。然后我们将更新同意表。前后做了很多手术,但我拿了一个案例。
    猜你喜欢
    • 2015-09-04
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多