我是Rails的新手并且非常享受它。 我正在将我的php应用程序转换为ROR应用程序。该应用程序正在使用MySql数据库,因此我想将ROR应用程序与已创建的数据库连接,并希望保留数据。 php有mysqli函数,ROR有没有类似的东西?
答案 0 :(得分:4)
我猜你需要的不仅仅是Daryll Santos'。他的回答将指导您建立与数据库的连接,但将表格映射到模型需要更加清晰。
作为mysqli
替代请求的答案,是的,ruby also has a mysql connector.但您不需要它。
标准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 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