modle的合法性验证
validates是一个方法
class Micropost < ApplicationRecord
#rails generate scaffold Micropost content:text user_id:integer
validates :content,length: {maximum: 140},
presence: true #验证微博内容必须存在 presence:存在,出席,仪表,风度,鬼魂
belongs_to :user
end
render函数,render函数不走路由,直接定位到哪个文件
1 .在.html.erb中调用render函数,默认路径为views
layouts文件夹位于views路径下
比如 :
views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
<title><%= full_title(yield(:title)) %></title>
<%= render 'layouts/rails_default' %>
<%= render 'layouts/shim' %>
</head>
<body>
<%= render 'layouts/header' %>
<div class="container">
<%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
</div>
</body>
</html>
这里用了render函数,想调用的是views/layouts/_rails_default.html.erb
路径可以直接写成layouts/rails_default
rails_default对应的就是_rails_default.html.erb这个文件,这是rails的命名规范
2. 在控制器中调用render函数,路径为当前控制器所对应的视图文件夹
比如在sessions_control.erb的create方法中
render 'ttt'
此时便会跳转到views/sessions/ttt.html.erb
问题:
在修改界面中,比如 users/1/edit
在源码中并没有指定发送patch请求,rails是如何知道该发送post还是patch呢?
答案:rails中的模型类都实现了new_record?方法,可以判断这个实例是新创建的还是从数据库中取出来的
$ rails console
>> User.new.new_record?
=> true
>> User.first.new_record?
=> false