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

yngzij · 2017年08月24日 · 最后由 tinyfeng 回复于 2017年08月24日 · 1951 次阅读

第一次发文,都是 (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 开始的

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

will_c_j 回复

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

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

will_c_j 回复

是 rails db:migrate 吧

piecehealth 回复

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

piecehealth 回复

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

flowerains 回复

差别感觉都不大

tinyfeng 回复

谢谢你嘞

chenge 回复

下次一定注意

yngzij 回复

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

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册