rails的一些学习笔记
rails的controller和model不一定要使用rails命令来写,只要文件的位置放的没错自己手动建立就可以。
- 手动创建model面临的问题就是数据库表不能建立,但这也有一个好处,我们可以自己新建表,或者使用原有的数据表,而且可以不用和model的名字一样,可以通过self.table_name来制定数据表,这样就有很大的而灵活性。
class yonghu < ApplicationRecord
self.table_name="user"
end
- 手动创建controller很简单就不在叙述,下面说说controller,model的名字不同时,会出现的问题。
- 首先会出问题的就是添加 ,如果你的添加页面使用的是 form_for @实例变量 这种方法就会出现:
undefined method `ffs_path’ for #<#:0x007f95b70af330> 这种错误,你就发现路由跳到和model名相同的复数路径下,这种错误就是因为你使用了 form_for @实例变量 这样的写法造成的,@实例变量会翻译成和model同名的复数形式路径,这就造成了路由错误,解决办法在routes.rb文件里手动写路径,注意create是post请求。
post 'ffs'=>'aas#create'
- 然后就是返回的参数,他是包在@实例变量里的,也就是model的复数名包含着参数。具体看下面返回的结果:
Parameters: {"utf8"=>"✓","authenticity_token"=>"BvKT9kNlTduSVYoIT0/sJjZanh+VH/nWk+uNAzB5g3Wk9THXtrVX02m5bWeWc4ZXsvMN4ttP+tgW75+tXq5+pw==", "ff"=>{"a"=>"asdfasd", "c"=>"asdf"}, "commit"=>"Create Ff"}
- 修改也会出点问题,也是form这快,路由问题update的2个路由都要重写
put 'ff'=>'aas#update'
patch 'ff'=>'aas#update'
- 然后就是edit页面的id问题,如果你按照rails的平常的写法来写,在提交的时候就会报错id为空,一个简单的办法在页面里加一个隐藏的input,改正做法如下:
<%= form_for @ss do |f| %>
<%= f.text_field :a %>
<%= f.text_field :c %>
<%= f.text_field :id %>
<input hidden type="text" value="<%= @ss.id %>" name="id">
<%= f.submit %>
<% end %>
- 最后贴上添加和修改时获取参数的方法,我在这犯了一个小错误在这记下来,具体就不多说了,上面都有说到:
private
def a_par
params.require(:ff).permit(:a)
end