Подключите приложение Rails к уже существующей базе данных MySql - PullRequest
0 голосов
/ 07 мая 2018

Я новичок в Rails и действительно наслаждаюсь этим. Я конвертирую свое php-приложение в ROR-приложение. Приложение использует базу данных MySql, поэтому я хочу связать приложение ROR с этой уже созданной базой данных и сохранить данные. В php есть функции mysqli, есть ли в ROR что-то подобное?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Полагаю, вам нужно больше, чем ответ Дэрила Сантоса . Его ответ поможет вам установить соединение с базой данных, но отображение таблиц на модели требует большей ясности.

В качестве ответа на ваш mysqli альтернативный запрос, да, ruby ​​также имеет разъем mysql. Но он вам не понадобится.

Стандартный пакет ROR поставляется со встроенным модулем orm, который называется ActiveRecord .

Если не указано иное, AR берет имена моделей, их множественное число и сопоставляет с таблицей, имеющей это имя, в подключенной базе данных. Существуют также другие соглашения, такие как первичный ключ, присвоение имен внешним ключам и т. Д. Вы можете искать их в документах AR.

Но вы можете изменить это поведение, как

class Book
  self.table_name = 'something_other_than_books'
end

Таким образом, AR будет искать таблицу something_other_than_books и автоматически скручивает ее столбцы в качестве свойств этого класса. Так как AR ожидает поле id в качестве первичного ключа для этой таблицы, и если у вас есть иное значение, кроме него, вы также должны объявить его явно.

class Book
  self.table_name = 'something_other_than_books'
  self.primary_key = 'book_id'
end

Вот руководство для AR запросов . Кстати, у него много общего с Eloquent в PHP. Вы легко его выберете, если знакомы с ним.

По крайней мере, давайте покажем несколько примеров и их эквиваленты SQL.

Book.find(2) # based on below model 
#=> SELECT * FROM something_other_than_books WHERE book_id = 2
Book.where(author: "Jack London")
#=> SELECT * FROM something_other_than_books WHERE author = 'Jack London'
Book.pluck(:book_id, :author)
#=> SELECT book_id, author FROM something_other_than_books
Book.order(book_id: :asc).pluck(:author)
#=> SELECT author FROM something_other_than_books ORDER BY book_id DESC

UPDATE

В отличие от необработанного PHP, Rails является полнофункциональным веб-приложением на основе MVC. Аналогами Rails из экосистемы PHP являются Symfony, Laravel, Cake, Yii2, FuelPHP и т. Д. Одним из основных преимуществ инфраструктуры MVC является то, что вам не нужно выполнять SQL-запросы внутри ваших представлений. Это означает, что вы не запрашиваете файл и ждете его, чтобы выполнить SQL-запрос, завернутый в HTML-код. Вместо этого вы получаете запрос, ваш маршрутизатор сопоставляет его с контроллером, передает данные в домен (модель), получает результаты, а затем отображает эти данные в файле представления.

Подумайте о файле php ниже (скажем, books.php).

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "my_db";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT book_id, author FROM something_other_than_books";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "Book ID: " . $row["book_id"] . " - Author: " . $row["author"] . "<br>";
    }
} else {
    echo "0 results found";
}
$conn->close();
?> 

Итак, отправив запрос на получение http://yourdoma.in/books.php,, вы получите список книг.

В Rails ваш код лучше структурирован - вначале это может показаться немного сложным, но когда ваше приложение разрастется, вы обнаружите, что работать с повторяющимися задачами чрезвычайно легко.

Шаги для имитации приведенного выше скрипта php и его результата в Rails.

1. Определите маршрут в вашем файле маршрутов

#config/routes.rb
get '/books' => 'books#index'
#or, resources :books, only: [:index]

2.Создать действие контроллера

#app/controllers/books_controller.rb
class BooksController < ApplicationController
  def index
    @books = Book.pluck(:book_id, :author)
  end
end

3.Книжная модель

#app/models/book.rb 
class Book < ActiveRecord::Base
  self.table_name = 'something_other_than_books'
  self.primary_key = 'book_id'
end

4. И, наконец, просмотр файла. (если вы не укажете это явно, действие индекса в books_controller.rb попытается отобразить app / views / index.html.erb с @books переменной экземпляра)

#app/views/index.html.erb
<% @books.each do |book|  %>
  Book ID: <%= book.book_id %> - Author: <%= book.author %>
<% end %>

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

0 голосов
/ 07 мая 2018

Да, проверьте config/database.yml, это, как правило, где хранятся параметры конфигурации базы данных. Вот руководство для этого. Вы должны установить gem mysql (или я считаю mysql2 ).

Из одного из моих старых проектов, вот как выглядит мой config/database.yml:

development:
  adapter: mysql2
  username: root
  database: APP_NAME_development
  host: localhost
test:
  adapter: mysql2
  username: root
  database: APP_NAME_test
  host: localhost
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...