ruby-on-rails – 为什么我的参数超出范围异常
发布时间:2020-12-17 03:05:50 所属栏目:百科 来源:网络整理
导读:我是Rails 4的铁轨初学者.我正在尝试创建一个酒单,其中包含酒庄的名称和瓶子的年份.这是我的表格 %= form_for @wine do |f| % %# render "errors",object: @wine % div class="form-group input-group input-group-lg" %= f.text_field :name,placeholder: "
我是Rails 4的铁轨初学者.我正在尝试创建一个酒单,其中包含酒庄的名称和瓶子的年份.这是我的表格
<%= form_for @wine do |f| %> <%# render "errors",object: @wine %> <div class="form-group input-group input-group-lg"> <%= f.text_field :name,placeholder: "Enter the winery name",class: "form-control input-lg" %> </div> <div class="form-group input-group input-group-lg"> <%= select_year(Date.today,start_year: Time.now.year,end_year: Time.now.year - 90,field_name: :year,prefix: :wine) %> </div> <div class="form_group input-group"> <%= f.submit "Add wine",class: "btn btn-success" %> </div> <% end %> 这是我的控制器 class WinesController < ApplicationController before_action :set_wine,only: [:show,:edit,:update,:destroy] def index @wines = Wine.all end def new @wine = Wine.new end def create @wine = Wine.new(wine_params) if @wine.save flash[:notice] = "Successfully created..." redirect_to @wine else flash.now[:error] = "There was a problem" render "new" end end def show end def edit end def update if @wine.update(wine_params) redirect_to @wine else flash[:error] = "Something went wrong" render "edit" end end def destroy @wine.destroy redirect_to wines_path end private def set_wine @wine = Wine.find(params[:id]) end def wine_params params.require(:wine).permit(:name,:year) end end 我的葡萄酒表有一个名称:字符串列和年份:日期时间列 每当我尝试创建一个新的葡萄酒时,我会得到一个超出范围异常的参数,并在我的创建操作中突出显示@wine = Wine.new(wine_params).我究竟做错了什么? 我的日志 Started GET "/wines/new" for 127.0.0.1 at 2013-09-04 10:55:54 -0700 Processing by WinesController#new as HTML Rendered wines/_form.html.erb (2.0ms) Rendered wines/new.html.erb within layouts/application (2.6ms) Rendered layouts/_header.html.erb (0.2ms) Rendered layouts/_footer.html.erb (0.1ms) Completed 200 OK in 10ms (Views: 9.3ms | ActiveRecord: 0.0ms) Started GET "/assets/comingsoonbg.png" for 127.0.0.1 at 2013-09-04 10:55:54 -0700 Started GET "/wines/new" for 127.0.0.1 at 2013-09-04 10:55:54 -0700 Processing by WinesController#new as HTML Rendered wines/_form.html.erb (2.1ms) Rendered wines/new.html.erb within layouts/application (2.7ms) Rendered layouts/_header.html.erb (0.2ms) Rendered layouts/_footer.html.erb (0.1ms) Completed 200 OK in 10ms (Views: 9.8ms | ActiveRecord: 0.0ms) Started POST "/wines" for 127.0.0.1 at 2013-09-04 10:55:59 -0700 Processing by WinesController#create as HTML Parameters: {"utf8"=>"?","authenticity_token"=>"FCd3wvCov+mugnJuzwplKD/eVskJKgxweh1mK0pG2wM=","wine"=>{"name"=>"kjkljhk","year"=>"2013"},"commit"=>"Add wine"} Completed 500 Internal Server Error in 1ms ArgumentError (argument out of range): app/controllers/wines_controller.rb:13:in `create' Rendered /Users/me/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_source.erb (0.7ms) Rendered /Users/me/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.9ms) Rendered /Users/me/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.9ms) Rendered /Users/me/.rvm/gems/ruby-2.0.0-p247/gems/actionpack-4.0.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (16.2ms) 我在schema.rb中的葡萄酒架构 create_table "wines",force: true do |t| t.datetime "year" t.datetime "created_at" t.datetime "updated_at" t.string "name" end 解决方法
日期和时间总是要求我三思而后行!在日志中,params包含一个字符串,其中包含select_year中的年份.最简单的解决方案是只存储整数表示,如果你需要的只是几年.如果稍后更改为select_date,则需要通过从params哈希中提取部分来在控制器中构建Date对象.有关更多详细信息,请参阅
Form Helpers Guide ……嗯,这里只是一点点.
在视图中: <%= select_date Date.today,prefix: :start_date %> 在控制器中,使您的Date对象: Date.civil(params[:start_date][:year].to_i,params[:start_date][:month].to_i,params[:start_date][:day].to_i) ActiveRecord期望一个属性在params哈希中有一个条目,但Date对象需要多个值.日期助手date_select(不是select_date)将传回一个散列,Rails将使用多参数赋值将其转换为质量赋值期间的日期. <%= date_select :person,:birth_date %> 如果你使用了date_select,你会在params hash中看到类似的东西: {:person => {'birth_date(1i)' => '2008','birth_date(2i)' => '11','birth_date(3i)' => '22'}} 请注意:person哈希中的键描述了多部分对象的顺序和类型,以便Rails可以弄清楚如何创建属性(例如,哈希键birth_date(2i)是Person中birth_date属性的第二个组成部分模型对象,是一个整数). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 无法将类型为“Finisar.SQLite.SQLiteConnection”的对象强
- open flash chart--8
- 利用JAXB进行xml和javabean之间转换
- c – 如何在保持弃用警告的同时删除类
- PostgreSQL 对称加密、非对称加密用法介绍
- Oracle数据库(十一)—— 视图
- 在C#中将我自己的非法字符插入Path.GetInvalidFileNameChar
- C中的软(非弱)引用 – 是否可能?有实施吗?
- clang tutological-constant-out-of-range-compare warning
- ruby-on-rails – Angular Rails路由?