将Rails应用程序连接到现有的MySql数据库

时间:2018-05-07 08:52:34

标签: ruby-on-rails ruby

我是Rails的新手并且非常享受它。 我正在将我的php应用程序转换为ROR应用程序。该应用程序正在使用MySql数据库,因此我想将ROR应用程序与已创建的数据库连接,并希望保留数据。 php有mysqli函数,ROR有没有类似的东西?

2 个答案:

答案 0 :(得分:4)

我猜你需要的不仅仅是Daryll Santos'。他的回答将指导您建立与数据库的连接,但将表格映射到模型需要更加清晰。

作为mysqli替代请求的答案,是的,ruby also has a mysql connector.但您不需要它。

标准ROR捆绑包附带内置的orm模块,称为ActiveRecord

除非另有说明,否则A​​R会获取模型名称,将其复数并映射到连接数据库上具有该名称的表格。还有其他约定,例如主键,外键命名等。您可以搜索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 querying的指南。顺便说一句,它与PHP中的Eloquent有很多相似之处。如果您熟悉它,您可以轻松地选择它。

至少,让我们展示一些示例及其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

<强>更新

与原始PHP不同,Rails是基于MVC的全栈Web应用程序。来自PHP生态系统的Rails的相似之处是Symfony,Laravel,Cake,Yii2,FuelPHP等.MVC框架的一个主要优点是,您不需要在视图中执行SQL查询。这意味着,您不要求文件并等待它执行包含html代码的sql查询。相反,您收到请求,您的路由器将其映射到控制器,它将数据传递到域(模型),收到结果,然后在视图文件中呈现这些数据。

考虑下面的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.Book model

#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中的索引操作将尝试使用@books实例变量呈现app / views / index.html.erb)

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

如果您使用rails生成器,则无需手动逐个创建这些文件。如果我能帮助你,请告诉我。

答案 1 :(得分:0)

是的,请查看config/database.yml,这通常是存储数据库配置设置的地方。 Here is the guide for that.你必须安装mysql(或我相信mysql2)gem。

从我的一个旧项目中,这就是我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