佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 使用Ruby on Rails快速開(kāi)發(fā)web應(yīng)用的教程實(shí)例

使用Ruby on Rails快速開(kāi)發(fā)web應(yīng)用的教程實(shí)例

熱門(mén)標(biāo)簽:企業(yè)做大做強(qiáng) 百度AI接口 客戶服務(wù) 語(yǔ)音系統(tǒng) 呼叫中心市場(chǎng)需求 硅谷的囚徒呼叫中心 Win7旗艦版 電話運(yùn)營(yíng)中心

 Ruby on Rails 正在令整個(gè) Web 開(kāi)發(fā)領(lǐng)域受到震憾。讓我們首先了解底層的技術(shù):

    Ruby 是一門(mén)免費(fèi)的、簡(jiǎn)單的、直觀的、可擴(kuò)展的、可移植的、解釋的腳本語(yǔ)言,用于快速而簡(jiǎn)單的面向?qū)ο缶幊獭n?lèi)似于 Perl,它支持 處理文本文件和執(zhí)行系統(tǒng)管理任務(wù)的很多特性。
    Rails 是用 Ruby 編寫(xiě)的一款完整的、開(kāi)放源代碼的 Web 框架,目的是使用更簡(jiǎn)單而且更少的代碼編寫(xiě)實(shí)際使用的應(yīng)用程序。

作為一個(gè)完整的框架,這意味著 Rails 中的所有的層都是為協(xié)同工作而構(gòu)造的,所以您不必自己再重復(fù),可以完全只使用一門(mén)單一的語(yǔ)言。 在 Rails 中,所有內(nèi)容(從模板到控制流再到業(yè)務(wù)邏輯)都是用 Ruby 編寫(xiě)的。Rails 支持基于配置文件和注釋的反射(reflection)和運(yùn)行時(shí)擴(kuò)展。

本文詳細(xì)介紹了 Rails 的組成部分,并介紹了它的工作原理。
Rails 介紹

關(guān)于 Rails,首先需要理解的是它的模型/視圖/控制器(model/view/controller,MVC)架構(gòu)。雖然這種技術(shù)不是 Rails 所特有的 —— 甚至不是 Web 應(yīng)用程序所特有的(相對(duì)于其他程序),但是 Rails 具有非常清晰而專(zhuān)一的 MVC 思維方式。如果您并不使用 MVC 方法,那么 Rails 的用處將大為降低(與遵循其模式的情況相比)。
模型

Rails 應(yīng)用程序的模型部分主要是它所使用的底層數(shù)據(jù)庫(kù)。實(shí)際上,在很多情形中 Rails 應(yīng)用程序正是以一種受管理的方式對(duì)關(guān)系型數(shù)據(jù)庫(kù)管理 系統(tǒng)(RDBMS)中的數(shù)據(jù)執(zhí)行操作的一個(gè)途徑。

ActiveRecord 類(lèi)是 Rails 的一個(gè)核心組成部分,它將關(guān)系型表映射為 Ruby 對(duì)象,使其成為控制器可以操作并能在視圖 中顯示的數(shù)據(jù)。Rails 應(yīng)用程序特別傾向于使用廣為應(yīng)用的 MySQL 數(shù)據(jù)庫(kù),不過(guò)也有與很多其他 RDBMS 的綁定,比如 IBM? DB2?。

如果您愿意,您可以添加 Ruby 代碼來(lái)在應(yīng)用程序模型中執(zhí)行額外的驗(yàn)證,加強(qiáng)數(shù)據(jù)關(guān)聯(lián),或者觸發(fā)其他操作。應(yīng)用程序的 app/models/ 目錄中的 Ruby 文件能夠調(diào)用 ActiveRecord 的多種驗(yàn)證方法。不過(guò),您也可以將模型代碼留作一個(gè)存根,而只是依賴(lài)保存數(shù)據(jù) 的 RDBMS 的約束。例如,我在這個(gè)示例中所開(kāi)發(fā)的應(yīng)用程序只包含這個(gè)骨架模型代碼(至少在開(kāi)始時(shí)是):
清單 1. 骨架模型 app/models/contact.rb

class Contact  ActiveRecord::Base
end

控制器

控制器以其抽象形式執(zhí)行應(yīng)用程序的邏輯。也就是說(shuō),應(yīng)用程序的 app/controllers/ 目錄中的 Ruby 腳本能把模型數(shù)據(jù)導(dǎo)入為變量,保存回去,或?qū)ζ溥M(jìn)行修改 和處理。不過(guò),控制器不關(guān)心用戶如何適當(dāng)?shù)仫@示或者輸入數(shù)據(jù)。在通常的 MVC 模型中,這可以讓用戶能夠以多種方式與同一控制器進(jìn)行交互:本地 GUI, Web 界面,以及視力較弱的人使用的語(yǔ)音界面都可以與相同的控制器進(jìn)行交互。

不過(guò),Rails 不像那樣非常通用;相反,它僅局限于在 Web 頁(yè)中提供和收集數(shù)據(jù)。雖然如此,但是您可以修改那些 Web 頁(yè)的布局 —— 顏色、字體、表格、 樣式表單,等等 —— 與控制器代碼無(wú)關(guān)。
視圖

Rails 視圖是我們編寫(xiě) Ruby 代碼的地方。Rails 包含有一門(mén)用于 .rhtml 的非常好的模板語(yǔ)言,它將純粹的 HTML 與嵌入的 Ruby 代碼組合起來(lái)。 Rails 應(yīng)用程序界面的最表層外觀通常是由 CSS 樣式表單控制的。.rhtml 格式是一種增強(qiáng)的 HTML。實(shí)際上,一個(gè)簡(jiǎn)單的 HTML 文件本身也是一個(gè) 合法的 RHTML 模板,不過(guò),不應(yīng)該忽略 RHTML 為您提供的腳本控制。

RHTML 是真正的模板格式 —— 不僅是在 HTML 中嵌入代碼的方式 —— 這是一種更為有效的方法。如果您熟悉 PHP,那么可以考慮 PHP 本身與 Smarty 模板之間的對(duì)照。也就是說(shuō),嵌入的腳本只是將代碼與未被解釋的 HTML 混合在一起;當(dāng)需要向客戶機(jī)輸出某些內(nèi)容時(shí),代碼部分 仍要負(fù)責(zé)執(zhí)行 print 語(yǔ)句。

與之不同的是,模板引擎向 HTML 添加了一組定制的標(biāo)簽,讓您能夠?qū)l件、循環(huán)以及其他邏輯作為增強(qiáng)的 HTML 標(biāo)記的一部分來(lái)表示。

生成代碼

Rails 所提供的工具主要是一組代碼生成器。相對(duì)于那些強(qiáng)迫我使用嚴(yán)格的工作空間和 IDE 的開(kāi)發(fā)環(huán)境,我更喜歡這種方法。 Rails 不會(huì)妨礙您,但是卻會(huì)為您省去大部分手工編程的工作 —— 或者,通過(guò)提供“可自由獲得的”初步(first-pass)支架(scaffolding), 至少幫助您輕松將需要手工編碼的工作分為多個(gè)部分。

支架 概念是 Rails 中的核心概念。非常簡(jiǎn)單的應(yīng)用程序可能完全不用編碼,讓 Rails 在運(yùn)行時(shí)動(dòng)態(tài)地生成客戶機(jī) HTML 頁(yè)面。 第一遍生成代碼時(shí)創(chuàng)建的只是粗略的支架;接下來(lái)您可以生成更詳細(xì)的能夠定制的控制器、視圖和模型。不過(guò)在開(kāi)始時(shí)不需要生成太多。

Rails 對(duì)其文件的組織是固定的而且非常普通的,不過(guò)這種組織相對(duì)嚴(yán)格。如果您試圖強(qiáng)行使用其他文件和代碼組織方式,那么您可能得 付出努力去修改 Rails 環(huán)境。再者說(shuō),我找不到不使用 Rails 所提供的組織方式的理由;在大部分情況下,它“fits your brain”(Ruby 的 支持者喜歡這樣講)。例如,如果您從頭開(kāi)始設(shè)計(jì)一個(gè)框架(至少如果您以“Ruby 方式”思考),那么這些目錄名稱(chēng)及其組織可能與您的選擇非常接近。

構(gòu)建一個(gè)簡(jiǎn)單的應(yīng)用程序

在 Ruby on Rails Web 站點(diǎn)上有一些教程,可以完整地引導(dǎo)您創(chuàng)建一個(gè)簡(jiǎn)單的 Rails 應(yīng)用程序(見(jiàn) 參考資料)。 這里的示例程序與之類(lèi)似,因?yàn)檎_開(kāi)始構(gòu)建 Rails 應(yīng)用程序的方式是確定的。由于此介紹的長(zhǎng)度相對(duì)較短,所以我 極力 推薦 那些較長(zhǎng)的教程中的一篇,以使得您能夠打好更為全面的基礎(chǔ)。

示例應(yīng)用程序是一個(gè)基本的通訊錄。它演示了創(chuàng)建應(yīng)用程序的一般步驟:

    生成模型(在此步驟中創(chuàng)建 MySQL 數(shù)據(jù)庫(kù)和表)。
    生成應(yīng)用程序(包括生成基本代碼和目錄)。
    啟動(dòng) Rails(并配置數(shù)據(jù)庫(kù)的訪問(wèn))。
    創(chuàng)建一些內(nèi)容(包括生成支架模型和控制器,并告知控制器去使用那個(gè)支架)。

我們將詳細(xì)研究每一個(gè)步驟。
生成 AddressBook 模型

對(duì)于任何應(yīng)用程序,您需要做的第一件事情是為它創(chuàng)建一個(gè)存放數(shù)據(jù)的數(shù)據(jù)庫(kù)。技術(shù)上這個(gè)步驟不必最先進(jìn)行,不過(guò)需要在早期完成;應(yīng)該在編寫(xiě)任何 應(yīng)用程序代碼(甚至是自動(dòng)生成的代碼)之前創(chuàng)建數(shù)據(jù)庫(kù),這應(yīng)該是顯然的。所以,讓我們?cè)?MySQL 數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),并在此數(shù)據(jù)庫(kù)中創(chuàng)建第一張表。 (閱讀其他文檔以了解如何安裝運(yùn)行 MySQL 或其他 RDBMS。)

我們假定 MySQL 已經(jīng)安裝并且可用。
清單 2. 創(chuàng)建 MySQL 數(shù)據(jù)庫(kù)和表

[~/Sites]$ cat AddressBook.sql
CREATE DATABASE IF NOT EXISTS AddressBook;
USE AddressBook;
CREATE TABLE IF NOT EXISTS contacts (
 id smallint(5) unsigned NOT NULL auto_increment,
 name varchar(30) NOT NULL default '',
 created_on timestamp(14) NOT NULL,
 updated_on timestamp(14) NOT NULL,
 PRIMARY KEY (id),
 UNIQUE KEY name_key (name)
) TYPE=MyISAM COMMENT='List of Contacts';
[~/Sites]$ cat AddressBook.sql | mysql

在這第一張表中有些地方需要注意。最重要的是每一張表都必須擁有一個(gè) id 列,列名稱(chēng)就是 id。Rails 使用 主鍵列 id 來(lái)完成各種記錄保持和引用任務(wù)。域 created_on 和 updated_on 是不需要的,不過(guò),如果您使用了它們,那么 Rails 會(huì)自動(dòng)地“在后臺(tái)”維護(hù)它們;在大部分情況下使用這些時(shí)間戳沒(méi)有什么不好。所以,您還要添加的“真正” 數(shù)據(jù)就只是通訊錄內(nèi)容的名稱(chēng)。

另一個(gè)稍微古怪的方面是,Rails 為不同的內(nèi)容使用單數(shù)和復(fù)數(shù)的名稱(chēng)。根據(jù)上下文,各種條目會(huì)被重命名為單數(shù)或復(fù)數(shù)形式。表的名稱(chēng)應(yīng)該使用復(fù)數(shù)格式。 我沒(méi)有使用不規(guī)則復(fù)數(shù)單詞的經(jīng)驗(yàn);datum 和 data 等單詞可能會(huì)令 Rails 出現(xiàn)問(wèn)題。
生成 AddressBook 應(yīng)用程序

既然已經(jīng)擁有了一個(gè)能夠交互的數(shù)據(jù)庫(kù),就可以創(chuàng)建 AddressBook 應(yīng)用程序了。第一個(gè)步驟是簡(jiǎn)單地運(yùn)行 rails 來(lái)生成基本目錄和支架代碼:
清單 3. 生成基本代碼和目錄

[~/Sites]$ rails AddressBook
create
create app/apis
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create components
[...]
create public/images
create public/javascripts
create public/stylesheets
create script
[...]
create README
create script/generate
create script/server
[...]

我刪減了運(yùn)行 rails 的輸出;所忽略了那些行只是提醒您已經(jīng)創(chuàng)建的各種文件和目錄。在您的系統(tǒng)上試運(yùn)行它,瀏覽生成的所有文件。 我已經(jīng)在代碼中顯示了一些最重要的文件和目錄。
運(yùn)行 Rails

創(chuàng)建了 AddressBook/ 目錄和所需要的子目錄后,您需要執(zhí)行一次惟一的初始配置。首先,通過(guò)修改 YAML 配置文件來(lái)設(shè)置數(shù)據(jù)庫(kù),如下:
清單 4. 配置數(shù)據(jù)庫(kù)訪問(wèn)

[~/Sites]$ cd AddressBook
[~/Sites/AddressBook]$ head -6 config/database.yml # after editing
development:
 adapter: mysql
 database: AddressBook
 host: localhost
 username: some_user
 password: password_if_needed

最后,您需要提供數(shù)據(jù)。Rails 附帶了它自己的單一功能的 Web 服務(wù)器,即 WEBrick,非常適用于我們的試驗(yàn)。您可能也會(huì)遵循 Ruby on Rails Web 站點(diǎn)上的說(shuō)明來(lái)配置 Apache 或者其他服務(wù)器,以通過(guò) FCGI(或者普通的 CGI,但是普通的 CGI 將會(huì)較慢)向 Rails 應(yīng)用程序提供服務(wù)。
清單 5. 啟動(dòng) WEBrick 服務(wù)器

[~/Sites/AddressBook]$ ruby script/server -d
=> Rails application started on http://0.0.0.0:3000
[2005-03-21 17:57:38] INFO WEBrick 1.3.1
[2005-03-21 17:57:38] INFO ruby 1.8.2 (2004-12-25) [powerpc-darwin7.8.0]

創(chuàng)建一些內(nèi)容

要在 WEBrick 端口上看到一個(gè)歡迎頁(yè)面,先前的步驟就足夠了。例如,在我的本地系統(tǒng)中,現(xiàn)在可以訪問(wèn) http://gnosis-powerbook.local:3000/。不過(guò),為了操作定制數(shù)據(jù)庫(kù),需要 生成稍微多一些代碼。可以使用腳本 generate 來(lái)完成此任務(wù), 這個(gè)腳本創(chuàng)建在 AddressBook/ 應(yīng)用程序目錄中:
清單 6. 支架模型和控制器代碼的生成

[~/Sites/AddressBook]$ ruby script/generate model contact
   exists app/models/
   exists test/unit/
   exists test/fixtures/
   create app/models/contact.rb
   create test/unit/contact_test.rb
   create test/fixtures/contacts.yml
[~/Sites/AddressBook]$ ruby script/generate controller contact
   exists app/controllers/
   exists app/helpers/
   create app/views/contact
   exists test/functional/
   create app/controllers/contact_controller.rb
   create test/functional/contact_controller_test.rb
   create app/helpers/contact_helper.rb

注意,在相應(yīng)的表名中,這里應(yīng)該使用單數(shù)的 contact,而不是復(fù)數(shù)的 contacts。

現(xiàn)在需要編輯一個(gè)或多個(gè)生成的文件(只需稍加編輯)來(lái)讓控制器去使用支架:
清單 7. 告知控制器去使用支架

[~/Sites/AddressBook]$ cat app/controllers/contact_controller.rb
class ContactController ApplicationController
  model :contact
  scaffold :contact
end

現(xiàn)在可以通過(guò)類(lèi)似于 http://rails.server/contact/ 的 URL (在我的測(cè)試用例中是 http://gnosis-powerbook.local:3000/contact/)來(lái)查看和修改數(shù)據(jù)庫(kù)的內(nèi)容。 輸入一些數(shù)據(jù)后,它看起來(lái)如圖 1 和圖 2 所示:
圖 1. 列出聯(lián)系人

圖 2. 編輯聯(lián)系人

創(chuàng)建可定制的內(nèi)容

前面的代碼創(chuàng)建了一個(gè)查看和修改數(shù)據(jù)庫(kù)的功能完全的界面,不過(guò),所有格式化、顯示以及業(yè)務(wù)邏輯(比如本來(lái)就有的)都由 Rails 動(dòng)態(tài)完成, 沒(méi)有任何重大修改。為了創(chuàng)建一些更為定制的內(nèi)容,需要生成更多一些代碼?,F(xiàn)在我們所需要的是讓 Rails 顯式地寫(xiě)出它在運(yùn)行時(shí)隱式地生成的 所有支架,以使得我們能夠修改它。
圖 8. 顯式控制器和視圖代碼生成

[~/Sites/AddressBook]$ ruby script/generate scaffold Contact
 dependency model
   [...]
   create app/views/contacts
   exists test/functional/
   create app/controllers/contacts_controller.rb
   create test/functional/contacts_controller_test.rb
   create app/helpers/contacts_helper.rb
   create app/views/layouts/contacts.rhtml
   create public/stylesheets/scaffold.css
   create app/views/contacts/list.rhtml
   create app/views/contacts/show.rhtml
   create app/views/contacts/new.rhtml
   create app/views/contacts/edit.rhtml

現(xiàn)在有了更多一些要做的,所以嘗試去修改一些內(nèi)容。(注意此代碼已經(jīng)重新使用了復(fù)數(shù)格式 contacts, 我不清楚其原因;現(xiàn)在我們需要接受它。)嘗試在 CSS 中修改一些顏色和字體:
清單 9. 配置層疊樣式表單

[~/Sites/AddressBook]$ head -8 public/stylesheets/scaffold.css
body { background-color: #ffe; color: #338; }
body, p, ol, ul, td {
 font-family: verdana, arial, helvetica, sans-serif;
 font-size:  13px;
}
td { border: 1px solid; }
a { color: #eef; background-color: #446; }
a:hover { color: #fff; background-color:#000; }

您已經(jīng)擁有了這段代碼,那么 contacts_controller.rb 做什么?就其操作而言,它比前面的代碼中所出現(xiàn)的 contact_controller.rb 更為顯式且可配置??刂破黝?lèi)似如下:
清單 10. 控制器 app/controllers/contacts_controller.rb

class ContactsController  ApplicationController
 def list
  @contacts = Contact.find_all
 end
 def show
  @contact = Contact.find(@params['id'])
 end
 def create
  @contact = Contact.new(@params['contact'])
  if @contact.save
   flash['notice'] = 'Contact was successfully created.'
   redirect_to :action => 'list'
  else
   render_action 'new'
  end
 end

如前所述,控制器的主要任務(wù)是將數(shù)據(jù)導(dǎo)入到變量之中。對(duì)象 Contact 是模型所提供的 ActiveRecord 對(duì)象-關(guān)系映射。變量 @contacts 或者 @contact 是它們的適當(dāng)方法中所給出的數(shù)據(jù)。 通過(guò) URL 可以訪問(wèn)那些方法本身,比如 http://rails.server/contacts/show/2 (這一個(gè)方法顯示出 id 為“2”的聯(lián)系人)。

此示例中的控制器最終連接到了視圖,即 RHTML 文件,它們使用的是控制器導(dǎo)入到變量中的數(shù)據(jù)值。例如,這里是 list 視圖的一部分:
清單 11. 列出視圖 app/views/contacts/list.rhtml

[...]
% for contact in @contacts %>
 tr>
 % for column in Contact.content_columns %>
  td>%=h contact.send(column.name) %>/td>
 % end %>
  td>%= link_to 'Show', :action => 'show', :id => contact.id %>/td>
  td>%= link_to 'Edit', :action => 'edit', :id => contact.id %>/td>
  td>%= link_to 'Destroy', :action => 'destroy', :id => contact.id %>/td>
 /tr>
% end %>
[...]

方法 ContactsController.list 導(dǎo)入變量 @contacts,RHTML 中的流控制標(biāo)簽從數(shù)組中 取出單個(gè)的記錄。

修改模型

初始的模型只包含聯(lián)系人的名字。不幸的是,本文中我已經(jīng)沒(méi)有余地?cái)U(kuò)展這個(gè)模型以使其包含實(shí)際的聯(lián)系人數(shù)據(jù),比如電話號(hào)碼、地址、電子郵件等等。通常,那些數(shù)據(jù) 應(yīng)該存放在一張子表中,子表的外部關(guān)鍵字關(guān)聯(lián)到表 contacts。Rails 模型會(huì)使用類(lèi)似這樣的定制代碼來(lái)指明關(guān)聯(lián):
清單 12. 定制代碼 app\models\phone.rb

class Phone  ActiveRecord::Base
 belongs_to :contact
end

在結(jié)束之前,讓我們來(lái)對(duì)數(shù)據(jù)模型稍加修改,以查看它如何影響應(yīng)用程序。首先,添加一列:
清單 13. 向模型添加 first_met 數(shù)據(jù)

$ cat add-contact-date.sql
USE AddressBook;
ALTER TABLE contacts ADD first_met date;
$ cat add-contact-date.sql | mysql

既然已經(jīng)修改了底層的模型,http://rails.server/contact/ —— 支架的后臺(tái)版本 —— 就會(huì)直接調(diào)整過(guò)來(lái),不需要您做什么。 控制器和視圖是完全自動(dòng)基于模型的。不過(guò),在 http://rails.server/contacts/ 上應(yīng)用程序版本使用了我們手工編寫(xiě)的文件, 并不是那樣自動(dòng)化的。

list 視圖將 Contact.content_columns 作為模板循環(huán)的一部分,能夠 自動(dòng)查找 所有 的列,不管它們是什么。不過(guò),edit 等其他視圖已經(jīng)被生成了,需要添加新的 數(shù)據(jù)域。例如:
清單 14. 編輯視圖 app/views/contacts/edit.rhtml

h1>Editing contact/h1>
%= error_messages_for 'contact' %>
%= start_form_tag :action => 'update' %>
%= hidden_field 'contact', 'id' %>
p>label for="contact_name">Name/label>br/>
 %= text_field 'contact', 'name' %>/p>
p>label for="first_met">Known Since/label>br/>
 %= date_select "contact", "first_met", :use_month_numbers => false %>/p>
input type="submit" value="Update" />
%= end_form_tag %>
%= link_to 'Show', :action => 'show', :id => @contact.id %> |
%= link_to 'Back', :action => 'list' %>

那么您手工修改的應(yīng)用程序看起來(lái)如何了呢?與默認(rèn)的區(qū)別不太大,不過(guò)在圖 3 和 4 中可以看到修改已經(jīng)生效了:
圖 3. 列出聯(lián)系人,修改后

圖 4. 編輯聯(lián)系人,修改后

結(jié)束語(yǔ)

Rails 為您提供了開(kāi)發(fā)靈活的 Web 應(yīng)用程序的一種極其快速的途徑;本篇介紹只是膚淺地涉及了如何使用 Rails。完整的框架包含很多實(shí)用的類(lèi)和方法, 能夠完成基于 Web 的應(yīng)用程序使用最多的操作。

Rails 的最大價(jià)值在于它孕育了一個(gè)成體系的“Rails 思維方式”,因?yàn)槟枰乃兄С执a令它變得完整。相對(duì)于只是給出要使用的原始材料的 其他工具包和框架而言,這是一個(gè)巨大的優(yōu)勢(shì)。Rails 開(kāi)發(fā)為您提供了將半成形(half-formed)的想法實(shí)現(xiàn)為功能完全的 Web 應(yīng)用程序的一條坦途。

您可能感興趣的文章:
  • 在Ruby on Rails中使用AJAX的教程
  • 提升Ruby on Rails性能的幾個(gè)解決方案
  • 詳細(xì)解析Ruby中的變量

標(biāo)簽:山西 安康 長(zhǎng)沙 崇左 海南 濟(jì)南 喀什 山西

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《使用Ruby on Rails快速開(kāi)發(fā)web應(yīng)用的教程實(shí)例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    郁南县| 伊川县| 屯门区| 衡东县| 台山市| 云和县| 古丈县| 嘉禾县| 日土县| 洛阳市| 浮梁县| 张掖市| 丁青县| 榆中县| 抚松县| 若尔盖县| 台州市| 大新县| 康定县| 大名县| 濮阳县| 平原县| 思茅市| 镶黄旗| 洪泽县| 潼南县| 南川市| 区。| 阆中市| 安岳县| 长沙市| 新密市| 衢州市| 抚州市| 河东区| 察隅县| 桑植县| 夹江县| 吴江市| 陆河县| 曲水县|