第一次发文,都是 (https://ruby-china.github.io/rails-guides/v4.1/getting_started.html) 的教程自己总结,需要大家的鼓励嘞,话不多少,直接开始,都是个人的理解,不对的地方谢谢朋友指出来 ,使用@huacnlee 老师的方法,谢谢老师。
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 什么事。
在 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 就是他的路径 在 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 类似数据结构,用来声明存储数据的类型。
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 的视图啦
可以在 app/models 下找到对应的文件设置,一般有不能设置为空,字符长度的限制。
root 'works#new'