Rails 从零学习 Rails 记录 (第一天)

yngzij · August 24, 2017 · Last by tinyfeng replied at August 24, 2017 · 2280 hits

第一次发文,都是 (https://ruby-china.github.io/rails-guides/v4.1/getting_started.html) 的教程自己总结,需要大家的鼓励嘞,话不多少,直接开始,都是个人的理解,不对的地方谢谢朋友指出来 ,使用@huacnlee 老师的方法,谢谢老师。

首先 rails 使用的是 M(Model) V(View) C(controller) 架构,简单一点 Model 也就是一个数据结构,并且可以在 Model 中限制数据的格式,Controller 就是在路由发送请求,你去帮路由处理的方法,我觉得可以理解为 View 的后台吧,View 就是显示的视图 ,Model 可以和 Controller 直接通信,View 可以和 Controller 直接通信。

route 的请求一般常见的就是 post 请求,用于发送数据,比如登陆,get 请求一般是页面的跳转,在网站名中可以看到 get 请求会带有路径,还有 delete,put。

rails new first_app 会自动帮你生成一个框架,也就是创建一个 rails 项目,项目的名字为 first_app,今天用到了 app 目录下的 contrellor, view,model。cd 到项目目录 运行rails server就能看到服务器已经启动了,如果不能启动(使用 linux 的朋友可以用 nohup rails s & )后台运行,我开始是 nodejs 没有安装 后来一次错误是默认的 3000 号端口被占用了。

生成路由

rails generate controller Welcome index 会在首先会在 app/controllers/welcome_controller.rb 中为你生成一个 index 路由,也会在 app/Views/welcome 中自动生成一个 index.html.erb 的 view 视图文件,因为你的 controller 中只有 index 这个方法,所用你只能通过 config/routes.rb 中的 get 'welcome/index' 访问 index 这个 view localhost:3000/welcome/index如果你想添加其他的路径,不但需要在 controllor 中添加方法,还需要在 view 中为这个方法创建一个同名的 view 视图文件。应为没有添加任何数据,所以不关 model 什么事。

CRUD 操作

在 config/routes 中添加 resources :works 会自动生成路由 你可以通过 rails routes 查看生成的路由 注意 仅仅只是生成了路由 controller view 都没有 所以 你必须手动生成 Controller rails generate controller works 可以看到生成了 works 的 views 文件夹和 works_controller.rb 控制器 现在 localhost:3000/works 还是打不开 因为你 works_controler.rb 中有 index 的方法吗?你的 app/views/works/目录下也没有 index.html.erb 的 view 文件吧。你在 rails routes 中所有看到的请求路径都需要自己手动添加方法和创建 view 视图

注意

  • 你在 rails routes 中看到的 works#index 目录是 works 也就是说 works_path 就是他的路径
  • post 路径是不可以打开的

创建表单

在 new.html.erb 下 源代码如下:

<%= form_for :list do |f| %>
  <p>
    <%= f.label :title %><br>
    <%= f.text_field :title %>
  </p>
  <p>
    <%= f.label :text %><br>
    <%= f.text_area :text %>
  </p>

  <p>
    <%= f.submit %>
  </p>
<% end %>

其中 list 是一个重要的参数,保存着 text 框中输入的数据,那么问题来了 发送到哪嘞 <%= form_for :list, url:works_path do |f| %> url 后就是发送的目标 注意 是发送给 works 的 post 请求,也就是 works/create 他是没有视图的,但是必须要在 controller 中给他创建一个 create 方法,这个时候,要保存数据,就需要使用 Model 了。

Model

前面说了 Model 类似数据结构,用来声明存储数据的类型。

  • 首先创建一个 Model rails generate model Work title:string text:text 两个存储文本的对象
  • 迁移数据 rails db:migrate 就是在数据库中声明同样的表,假如写错了 可以 rails rollback 取消上次的迁移操作

存储

在 app/controller/works_controller.rb 中

 def create
@work=Work.new(params.require(:list).permit(:title, :text)) 
  @work.save
  redirect_to @work
end

如果用 @lis =Work.new(params[:article]) 会出错 必须设置能通过的白名单 title 和 text 就类似防火墙的机制吧 问下大神 是不是 Moel 必须和对应的 Controller 名相同,比如是 Work 和 works,我之前 Model 用 List 一直报错 redirect_to 找不到路径

这里 list 就是上文 view 中的 list 用 post 的方式发送给 create 注意 works 有一个 get 的 index 和 post 的 create 请求,接收到数据后 index/X 显示

def show
    @work=Work.find(params[:id])
  end

当然还有在 app/views/works/下面创建 show.html.erb 的视图啦

Moel 的使用

可以在 app/models 下找到对应的文件设置,一般有不能设置为空,字符长度的限制。

小结

  • 如果 Model 和 Controller 名不同,在 New 界面填写后不能跳转到 index 界面 有找不到路径的错误。
  • f.text_area 是固定的参数吗?
  • 在/confog/routes.rb 下面设置 root 路径 格式 root 'works#new'

迁移数据是 rake db:migrate?

注意下排版吧,不要把标题当黑体。

“如果 Model 和 Controller 名不同,在 New 界面填写后不能跳转到 index 界面 有找不到路径的错误.”

New 界面填写完,提交后应该是发送 Post 请求,处理这个请求的是你 controller 里 create 的方法,不是直接跳转到 index 界面。

“f.text_area 是固定的参数吗?”

只是 f 调用的一个方法,类似还有 password,你在相应位置输入的文本自动会用*代替,另外还有 string_area 等等,string 和 text 区别好像 text 是限制长度为 255 吧

ps:我也是 rails 新手,刚学一个多月,欢迎大家指错。

rails guide 更像是一本手册。。
我的自学还是从 rails tutorial 开始的

学习的劲头值得鼓励,笔记自己记录一下就好了,毕竟写给别人看还要琢磨用词,还要排版都需要花费很大精力。

Reply to will_c_j

老版本的是 rake,好像从某个版本后就是 rails db:migrate 了

建议有其他语言基础再学 rails,否则你学完后会发现基本找不到工作。

Reply to will_c_j

是 rails db:migrate 吧

Reply to piecehealth

学过 C 语言 真心觉得 ruby 语法舒服☺

Reply to piecehealth

也可以让其他的朋友指出自己的错误嘛

Reply to flowerains

差别感觉都不大

Reply to tinyfeng

谢谢你嘞

Reply to chenge

下次一定注意

Reply to yngzij

我也是刚毕业的,学电路的,入了程序员的坑,进公司才学的 rails。。。

You need to Sign in before reply, if you don't have an account, please Sign up first.