form表单的两个输入框得到参数的解决方案

简介:
昨天碰到的问题:
对于一个资源book,有两个字段book_name和author,在输入的时候,表单是这样的:
代码:
<%=f.collection_select :name, Book.find(:all, :order=>'name'), :id, :name,:prompt=>"Select book's name"%>or add a new book<%=f.text_field :new_book_name%>
这里对于书名的录入分为2中方式,一种是选择下拉菜单中的已有书名,另一种是创建新的书名。而传递的参数,第一个是:name,第二个是:new_book_name
1.选择下拉菜单中的选项,后面的文本框为空,那么params[:book][:name]有值,而params[:book][:new_book_name]为空。此时要以params[:book][:name]作为添加到数据库中的值
2.文本框输入新书名,下拉菜单为空。情况与1相反。此时将params[:book][:new_book_name]添加到数据库中
3.都有值。发生错误,提示用户必须2选1
4.都为空。发生错误,提示用户必须2选1
 
解决方案:在book_controller的create方法中,添加一个控制语句:
def create
    if params[:book][:name].blank?
      params[:book][:name]=params[:book][:new_book_name] 
      params[:book]
    end

    @book = Book.new(params[:book])
...
 
  在model中添加:
  attr_accessor :new_book_name
  def validate
    a=name.blank?
    b=new_book_name.blank?
    if (a&&b) || ((!a)&&(!b))
      errors.add(:name, "You must select an exist book OR create a new book!") 
    end
  end
----
这样就搞定了。。
逻辑控制的不太好,要学着写测试了
 



本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/99823,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
JavaScript 前端开发 数据安全/隐私保护
提交表单与验证表单案例
提交表单与验证表单案例
18 0
|
16天前
|
JavaScript 前端开发 API
表单输入绑定
表单输入绑定
|
9月前
|
Java Maven 数据安全/隐私保护
一个简单的自定义输入框
今天还是一篇关于自定义View相关的,带来一个大众的,常见的一个输入框,很多的场合下都能遇到,比如验证码,密码框等等,配置了很多常见的属性,可以满足不同场合下的需求,矩形框,圆角框,下划线等等均可满足,长度设置,光标选择,背景选择,均可控制。
|
4月前
|
JavaScript 前端开发
Javascript的form表单校验输入框
Javascript的form表单校验输入框
25 0
|
5月前
element中form表单resetFields()方法重置表单无效
element中form表单resetFields()方法重置表单无效
|
6月前
|
JavaScript
一个form表单有两个按钮,分别提交到不同的页面
一个form表单有两个按钮,分别提交到不同的页面
31 0
|
JSON 前端开发 JavaScript
表单提交类型
关于提交表单的属性
74 0
|
前端开发
【前端异常】html页面中的button按钮会自动提交form表单的问题以及解决方案
有时候我们可能需要在表单中放置多个按钮,比如表单页面常见的按钮有创建和取消。点击创建按钮会触发单击响应事件,在单击响应事件中进行提交表单,这没有任何问题。点击取消按钮的时候,触发对应的单击响应事件,这个单击响应事件中主要处理关闭表单页面逻辑,所以会关闭页面,这也正常。但是!打开控制台监听请求会发现,它也会提交表单。
520 0
【前端异常】html页面中的button按钮会自动提交form表单的问题以及解决方案
|
移动开发 前端开发 HTML5
前端表单部分新属性
前端表单部分新属性
73 0
|
JavaScript
Vue表单中判断当前行输入框的值与整个表单的输入框的值是否重复(过滤自身数据)
使用Element输入框自带change事件获取到scope.$index以及input框中的值(@change="change(scope,$event)"); 使用forEach遍历整个表单的数据(item是需要遍历的数组,index是数组中元素的下标);
434 0
Vue表单中判断当前行输入框的值与整个表单的输入框的值是否重复(过滤自身数据)