От php и SQL до Rails и ActiveRecord - PullRequest
1 голос
/ 28 июля 2011

У меня есть устаревшая БД с множеством таблиц (около 100), старая система запускается с использованием php и так много операций с данными, используемыми в NLP.Мне было немного любопытно, как это можно сделать с помощью Rails.Я читал, что ActiveRecord не годится для устаревших систем!но я сею, что некоторые люди использовали его без проблем, так почему же это так?Кроме того, учитывая следующий php-код со многими операторами If & SQL, некоторые считают, что такой случай рассматривается как типичная задача данных / базы данных, а не как OO, поэтому лучше держаться подальше от AcriveRecord или любого другого ORM.Это правда?если нет, может ли это быть легко сделано с помощью ActiveRecord Rails?

Предполагая, что все переменные передаются из веб-формы.у нас есть текст для аннотации, и мы должны посмотреть, есть ли другие пользователи, которые согласны с этим пользователем, который отправил форму.Затем мы обновим таблицу согласований.

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");
        }
    }
}
}

С уважением

1 Ответ

0 голосов
/ 28 июля 2011

Что ж, использование устаревших схем баз данных с ActiveRecord лишает вас некоторых преимуществ. Например, Rails использует подход «соглашение поверх конфигурации» для многих вещей, и ActiveRecord наследует это. Например, если у вас есть модель с именем Product, Rails предполагает, что ваша таблица будет называться «products». По этой причине вам не нужно настраивать имя таблицы. То же самое относится и к внешним ключам, соглашениям об URL-адресах и т. Д. Чем больше вы хотите, чтобы ваше приложение работало так, как работает Rails, тем проще будет время. Если ваша цель - не «создать приложение, которое делает X», а «преобразовать это приложение в Ruby и ActiveRecord», результирующий код будет не таким ясным или идиоматичным.

Если вы попытаетесь написать приложение так, как это принято для используемого вами инструмента, в результате вы, вероятно, получите более понятный и более понятный код.

Что касается предоставленного вами кода, мне не совсем понятно, что он должен делать (так как у меня нет контекста, чтобы узнать, что "submit_it", "user_id_agree", "annotation" и т. Д. Означают в ваше заявление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...