使用form表单进行前后台传值

form表单的写法

一、使用原生的form表单

例如通过提交表单进行更新操作,原生表单的写法如下:
方法1:

<% form action="/users"  method=" POST" %>
<input type="hidden", name="_method",value="PUT">
姓名:<input name="name" >
年龄:<input name = "age" >
<input type="submit" value="提交" >
 <% end %> 

对应的controller中update action的传值是:

@user = User.update(name: params[:name], age: params[:age])

@user = User.update(params.permit(:name, :age)

方法2:

<% form action="/users"  method=" POST" %>
<input type="hidden", name="_method",value="PUT">
姓名:<input name="user[name]" >
年龄:<input name = "user[age]" >
<input type="submit" value="提交" >
 <% end %> 

对应的controller中update action的传值是:

@user = User.update(name: params[:user][:name], age: params[:user][:age])

@user = User.update(params.require(:user).permit(:name, :age)

方法3:

<% form @user action= "/users"  method=" POST" %>
<input type="hidden", name="_method",value="PUT">
姓名:<input name="name" >
年龄:<input name = "age" >
<input type="submit" value="提交" >
 <% end %> 

由于form中引用了@user这个实例变量,那么其中的

姓名:<input name="name" >
年龄:<input name = "age" >

等价于方法2的写法,这时候就需要透过user去取值,传到后台的params其实是hash套user的hash的格式,
对应的controller中update action的传值是:

@user = User.update(name: params[:user][:name], age: params[:user][:age])

@user = User.update(params.require(:user).permit(:name, :age)

方法4.
和方法3不同在于@user是一个实例变量,而如果用:user则是指向user这个model进行增删改查,因此还可以写成:

<% form_for :user, url: users_path, method: :put %> do |f|
<%= f.label :"姓名" %>
<%= f.text_field :name %>
<%= f.label :"年龄" %>
<%= f.text_field :age %>
<input type="submit" value="提交" >
 <% end %> 

这里我们用的是f去遍历form_for中每个字段,因此写法和上面三种原生的form表单略有不同
由于在form_for中指定了user这个model,因此我们需要透过user去取name,age的值,传到后台的params其实是hash套user的hash的格式,
对应的controller中update action的传值是:

@user = User.update(name: params[:user][:name], age: params[:user][:age])

@user = User.update(params.require(:user).permit(:name, :age)

补充:

1.params.permit(:name)这样的写法是只有一层,那么直接可以通过params[:name]来获取name的值;而params.require(:user).permit(:name)是有两层关系,需要通过params[:user][:name]才能获取name的值

2.使用f.text_field传值和input传值方式有所不同
(1)用input获取后台的值

<input name= "user_name", value="<%=@user.user_name%>" >

(2)用f.text_field获取后台的值

<%= f.text_field :user_name, class: "form-control", value:  @user.age%>

两者的区别在于value=后面跟的是字符串"<%=@user.user_name%>",可以用字符串拼接的方法;而value: 后面不跟字符串而是直接用@user.user_name获取栏位中的内容

注意:

如果不确定传到后台的params是什么格式,那么可以使用pry加入断点来看

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,730评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,264评论 19 139
  • //Clojure入门教程: Clojure – Functional Programming for the J...
    葡萄喃喃呓语阅读 9,287评论 0 7
  • D31-3月24日 3.1 彩芬 南宁 接纳挑战30结束了,写写总结。 老师很有智慧的策略,挑战30天就是一个小目...
    31彩芬南宁阅读 3,971评论 11 6
  • 在寝室乐园里,每天都充满了欢声笑语,每天都洋溢着生机勃勃的朝气,好似一座我们成长的乐园.我喜欢这个寝室,不是因...
    霞霞夏夏阅读 1,747评论 0 2

友情链接更多精彩内容