Rails框架

Ruby on Rails框架入门实战指南 本文还有配套的精品资源,点击获取 简介:Ruby on Rails,简称RoR,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC架构模式,以提高开发效率和代码可读性。本教程将从Ruby语言基础开始,详细解释Rails框架的MVC结构、ActiveRecord、路由系统、测试驱动开发(TDD)和视图模板等核心概念。此外,还会涉及如何利用社区提供的gem插件来扩展应... 阅读详情

转自http://baike.baidu.com/view/663386.htm

 

 

感谢杨帆同学的推荐!

rails

  Rails框架首次提出是在2004年7月,它的研发者是26岁的丹麦人David Heinemeier Hansson。不同于已有复杂的Web 开发框架,Rails是一个更符合实际需要而且更高效的Web开发框架。Rails结合了PHP体系的优点(快速开发)和Java体系的优点(程序规整),因此,Rails在其提出后不长的时间里就受到了业内广泛的关注。
  2008年,Rails官方站已经推出Rails框架2.1正式版。
  Rails框架主要有如下的6大特点。
  1.全栈式的MVC框架
  Rails是一个全栈式的MVC框架,换句话说,通过Rails可以实现MVC模式中的各个层次,并使它们无缝地协同运转起来。
  在实际开发一个MVC模式的Web应用项目时,如果使用Java开发,需要用到Struts(Controller 层)、Hibernate(Model层)和Spring 3个框架,而且需要额外整合3个框架开发出的内容。而使用Ruby语言开发相同的项目时,只需要用到Rails框架就可以完成。
  2.约定优于配置
  为了说明各个对象之间的关联关系,一般的Web应用开发框架往往采用写入XML配置文件的方法。这种方式虽然可以解决一些问题,但是却带来了管理上的混乱。
  Rails 对此的态度是约定优于配置,这意味着在Rails中不会出现XML配置文件。Rails使用Web应用多年来积累的各种常见约定(更具体地说是命名规则)来代替XML配置文件,而在Rails内部的映射与发现机制根据这些约定可以实现对象之间的关联。在第1章中,通过Rails的映射与发现机制实现了数据表与Ruby对象之间的关联。
  3.更少的代码
  使用约定来代替XML配置文件说明Rails本身完成了大量的底层工作,这意味着使用更少的代码来实现应用程序是极有可能的。此外,代码量的缩减也减小了出现bug的可能性,降低了维护程序和升级程序的难度。
  4.生成器
  Rails 使用的实时映射技术和元编程技术,免去了开发人员在开发过程中编写大量样板文件代码的烦恼。在少数需要使用样板文件代码的时候,开发人员可以通过 Rails内建的生成器脚本实时创建,而不再是通过手工编写。Rails的这个特点可以使开发人员更专注于系统的逻辑结构,而不必为一些琐碎的细节所烦扰。
  5.零周转时间
  对已有的Web应用系统进行修改后,其一般需要经过配置、编译、发布、重新设置、测试等一系列步骤才能投入使用,这明显浪费了许多时间。而使用Rails开发Web应用系统,可以通过浏览器即时查看程序运行结果,从而节约了大量的时间。
  6.支架系统
  Rails的支架系统可以自动为任何相关的数据库表创建一套包含标准CRUD操作和前台视图的系统。通过支架系统,开发人员可以方便快捷地操纵数据库中的数据表。此外,Rails也允许开发人员使用自己设计的代码或视图来替换自动生成的代码和视图。
  7.指导原则
  Rails的指导原则是"不要重复你自己"(Don't Repeat Yourself, 或DRY).意思是说你写的代码不会有重复的地方.比如以往数据库的接口往往是类似的程序代码但是在很多地方都要重复用到.这无论是给编写还是维护都造成了很大的代价.相反,Rails给你提供了绝大多数的支持,让你只需要短短的几行代码就可以实现强大的功能.而且,Rails提供了代码生成工具,让你甚至不需要编写一行代码就实现强大的管理程序.Rails通过reflection和runtime extension减少了对configuration文件的依靠,这和Java,C#语言的方向有很大不同,让你减少了很多配置和部署的麻烦,但是性能上却完全可以应付一般网站的需求.
Ruby on Rails基础教程及实用代码示例 本文还有配套的精品资源,点击获取 简介:Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用程序框架,它采用MVC架构模式,简化了Web开发流程。本文档是针对新手的入门级教程,内容包括Rails的基础知识、Ruby语法基础、Rails生成器使用、数据库操作与ActiveRecord的运用、Rails测试实践、开发工具的使用、Rails最佳实践以... 阅读详情

相关推荐

深入理解Rails框架:模型、视图与控制器

本文深入探讨了Rails框架中的核心概念,包括模型(Model)、视图(View)和控制器(Controller)之间的关系及其应用。通过创建和管理数据库表、定义对象关联以及处理HTTP请求和响应,展示了Rails如何简化Web开发流程。文章还介绍了如何通过Rails控制台与数据库交互,并通过实例说明了如何在控制器中使用实例变量与视图进行数据传递。

weixin_42356162的博客 402

框架分析(6)-Ruby on Rails

对Ruby on Rails进行详细讲解

AI+全栈,AI+应用,实操落地,前沿技术 3309

rails框架介绍分享

介绍rails框架,版本是rails2点几的,不过思路差不多,具体区别可以去看官网

2022十佳后端开发框架,快来看看吧

分享 10 个用于创建 Web 应用程序的最佳后端框架。

u013643074的博客 6045

AI智能体赋能Cypress:自动化前端测试的新范式

自动化测试是现代软件工程保障质量的核心实践,其原理是通过脚本模拟用户操作,对软件功能进行验证。随着大语言模型(LLM)和智能体(Agent)技术的发展,测试自动化正迈向智能化新阶段。智能体能够理解自然语言描述的测试需求,并自主规划、执行测试步骤,这为应对前端UI频繁变更、测试用例维护成本高等挑战提供了新思路。在工程实践中,将Cypress这一流行的前端测试框架封装为智能体可调用的标准化技能(Skill),是实现这一愿景的关键。通过设计清晰的交互协议和状态管理机制,智能体可以像人类测试工程师一样“感知”页面状

weixin_33726318的博客 686

用ADS2023手把手仿真SKYWORKS SMA1234变容二极管:从Datasheet到S参数结果全流程

本文详细介绍了如何使用ADS2023仿真SKYWORKS SMA1234变容二极管的全流程,从Datasheet参数解析到S参数结果验证。通过等效电路建模、关键公式编写和仿真设置,帮助工程师掌握变容二极管在射频电路设计中的应用技巧,提升仿真精度和工程实践能力。

weixin_29233333的博客 502

理解Rails框架

Rails框架首次提出是在2004年7月,它的研发者是26岁的丹麦人David Heinemeier Hansson。不同于已有复杂的Web 开发框架,Rails是一个更符合实际需要而且更高效的Web开发框架。Rails结合了PHP体系的优点(快速开发)和Java体系的优点(程序规整),因此,Rails在其提出后不长的时间里就受到了业内广泛的关注。 简介   Ruby on

1237

时序SDC约束set_data_check及常见应用场景

时序约束SDC之set_data_check命令及常见应用场景解析

weixin_37584728的博客 2287

rspec-rails:Rails 应用的 RSpec 测试框架

rspec-rails是Ruby on Rails项目中广泛使用的测试框架,作为Minitest的替代方案。它采用自然语言风格描述测试行为,提供清晰的可读性报告。安装时需在Gemfile中添加依赖并执行生成命令,会自动创建基础配置文件。框架支持10种测试类型(如model、request、system等),并提供专用匹配器简化断言逻辑。版本号与Rails版本对应,升级时需注意兼容性。rspec-rails通过集成Rails生成器系统,能自动创建各类测试文件,是Rails项目测试的高效解决方案。

lishantech135的博客 350

TortoiseGit提示No supported authentication methods available错误

一、问题 在使用TortoiseGit与远程仓库进行同步代码的时候提示如下错误,即:没有支持认证的方法可用。而GitBash却可以正常使用,不受影响。 通过调查,发现应该是TortoiseGit远程仓库的公匙无法和本地的密匙进行匹配认证造成的(主要是TortoiseGit缺少本地密匙)。由于TortoiseGit的默认网络SSH client是TortoiseGitPlink.exe,如下图所示。因此主要有两种方式来解决该问题: 不修改TortoiseGit的默认网络SSH client,此时需要为To

Jeffxu_lib的博客 2万+

反激变压器反射电压详解

我以前做过隔离式的POE模块,其电路实际就是个反激式开关电源。只不过其输入电压范围比较低,为44V-57V。 电路如下图,就是个flyback。 可以看到,电路中有个钳位电路,用来抑制电压尖峰,就在初级线圈那里。 问题 抑制尖峰通常有2种电路,一种叫RCD钳位,另外一种是用TVS管+二极管钳位。 这两种实际中都有用,今天我不想讨论它们的区别,只想说明一个问题: 为什么不能只用一个二极管搞定?像继电器电路那样?不也能抑制尖峰吗? 答案自然是不行的...

weixin_42005993的博客 2万+

Rails框架视图

谢谢朋友小鹿提供这张图,很不错。

hardcoder 135

基于MATLAB的多无人机多任务调度算法——CBBA带时间窗

本文将介绍基于MATLAB的CBBA算法,并对其进行改进,加入时间窗概念,以提高多无人机系统的调度效率和性能。时间窗用于限定任务的执行时间范围,以避免任务执行时间过长或过短导致的问题。具体而言,我们为每个任务设置一个允许的最早开始时间和最晚结束时间,并在任务分配的过程中考虑这些时间约束。在多无人机系统中,需要将若干个任务分配给不同的无人机完成,以实现高效的任务执行。以上是关于基于MATLAB的多无人机多任务调度算法CBBA带时间窗的简要介绍和源代码实现。多无人机系统的调度问题。

BUG?不存在的! 1898

Rails做api开发常用框架

Rails做api开发常用框架 rails-api grape sinatra

产品人生 1203

汽车OTA 测试用例

汽车OTA 测试用例

天赐好车的博客 976

微店构造订单页面,自动化抢票

之前的文章写过微店抢票如何构造订单页面分析,这篇文章在之前的基础上,进行抢票。

猫敷雪 7202

推荐使用:Bulma-Rails —— 结合Rails的强大CSS框架

推荐使用:Bulma-Rails —— 结合Rails的强大CSS框架 项目介绍 Bulma-Rails 是一个将Bulma框架无缝集成到Rails应用的优秀开源项目。基于Flexbox构建的Bulma,是一个现代且灵活的CSS框架,让你在开发Web应用时拥有更多的设计自由度。 项目技术分析 通过简单地将gem "bulma-rails", "~> 0.9.4&...

gitblog_00003的博客 463

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

java rails 框架,Rails框架流行在他的设计理念

这两天看了一本书《Grails权威指南》,看了这个Java上Rails框架,其中有两条设计理念:1、make simple thing easy and make complex possible -让简单的事情变的容易,同时让复杂的事情的实现成为可能2、Convention Over Configuration --约定高于配置Rails几乎成了敏捷web框架的代名词,Java社区的Grails...

weixin_34206129的博客 353

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

rails框架介绍

Rails框架首次提出是在2004年7月,其的研发者是26岁的丹麦人David Heinemeier Hansson。不同于已有复杂的Web 开发框架,Rails是一个更符合实际需要而且更高效的Web开发框架。Rails结合了PHP体系的优点(快速开发)和Java体系的优点(程序规整),因此,Rails在其提出后不长的时间里就受到了业内广泛的关注。   2008年,Rails官方站已经推出R

nothing0318的专栏 5324

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ruby on rails_顶级Ruby框架Rails和Merb联手

ruby on railsApologies to any readers who develop on the LAMP stack, or who use ASP, CFM, Python, or anything other than Ruby — this post might not be of interest to you. But it’s fairly rare for two...

culh2177的博客 430

Ruby on Rails框架(4)-Rails 资源

前面我们说过,资源作为一种用户可访问的信息,是restful应用程序的核心概念,并且我们能够使用标准化的 url 地址来访问我们应用开发的资源。那这些概念,到底在我们 Rails 框架中是怎么应用和实现的呢? 前面我们说 MVC 架构的时候,我们说了使用 generate 创建控制器的相关方法,前面我们给控制器的命名是比较随意的,我们说我们增加某种功能的时候,我们就去创建一个控制器响应请求,...

jacky_zhuyuanlu的博客 995

开始学习使用rails框架了

这周正好有点时间,所以打算学习一下rails框架的使用。 其实去年就买了相关的书籍,只是一直存在种种借口没有学习起来。这次一定要加油了。

飞得更高 273

接入 Rails 响应式框架只需两条命令:Foundation for Rails 安装与配置实操

给老 Rails 后台补移动端适配时,最拖时间的往往不是后端接口,而是断点、栅格和按钮表单样式,全要自己从头写。Foundation for Rails 就是为这种处境准备的 gem:它把 Zurb Foundation 的样式与脚本接进你的 Rails 项目,装完即可在视图里直接用现成组件,适合会 Ruby 但没碰过前端工程化的 Rails 开发者。 ## 安装命令速查与加载验证 打开项目根

gitblog_00219的博客 1014

Marionette Rails:基于Ruby on Rails的高效前端开发框架

Marionette Rails:基于Ruby on Rails的高效前端开发框架 项目介绍 Marionette Rails是一个专为Ruby on Rails设计的前端框架,它整合了Backbone.js与Marionette.js的力量,简化了构建富交互性和响应式Web应用的过程。该框架利用Rails的资产管线处理CSS与JavaScript资源,为开发单页面应用(SPA)提供了便捷途径。...

gitblog_00093的博客 547

Lina:基于Ruby on Rails的RESTful API开发框架

Lina:基于Ruby on Rails的RESTful API开发框架 项目介绍 Lina是一个基于Ruby on Rails的RESTful API开发框架,旨在为Rails开发者提供零成本上手的API开发体验。Lina整合了Ruby on Rails的最佳实践,并添加了API文档生成、参数校验等必备功能。其主要特点包括: Rails开发者零成本上手:Lina的设计与Rails的开发体验几乎...

gitblog_00049的博客 461

2.Rails程序框架

模型(model) 视图(view) 控制器(controller) Rails对Web应用的结构有着严格的约束。但是这些约束反倒使得创建应用程序变得简单。模型负责维持应用程序的状态。这种状态有时候是短暂的(仅用于和用户的几次交互),有时是持久的(需要将其保存在应用程序之外,如数据库中)。 模型是数据,但又不只是数据。还负责把业务规则附加在这些数据上。通过这样的设计,模型就不再只是数据的容器

Bing's Blog 2258
上一篇: SQL Server Management Studio 安装
下一篇: rest设计开发方式
jpl12
博客等级 码龄20年 27粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值