ruby on rails - Why am I getting argument out of range exception -


im rails beginner on rails 4. im trying create wine list takes name of winery , year of bottle. here form

<%= form_for @wine |f| %>     <%# render "errors", object: @wine %>     <div class="form-group input-group input-group-lg">         <%= f.text_field :name, placeholder: "enter 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 %> 

here controller

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 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 

i have wines table name:string column , year:datetime column

whenever try , create new wine argument out of range exception , highlights @wine = wine.new(wine_params) in create action. doing wrong?

my log

started "/wines/new" 127.0.0.1 @ 2013-09-04 10:55:54 -0700 processing winescontroller#new 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 "/assets/comingsoonbg.png" 127.0.0.1 @ 2013-09-04 10:55:54 -0700   started "/wines/new" 127.0.0.1 @ 2013-09-04 10:55:54 -0700 processing winescontroller#new 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" 127.0.0.1 @ 2013-09-04 10:55:59 -0700 processing winescontroller#create 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) 

my schema wines in schema.rb

create_table "wines", force: true |t|     t.datetime "year"     t.datetime "created_at"     t.datetime "updated_at"     t.string   "name"   end 

date , time require me think twice! in log, params contains string year select_year. simplest solution store integer representation, if you'll need years. if later change select_date, you'll need build date object in controller extracting parts params hash. see form helpers guide more detail... well, here bit.

in view:

<%= select_date date.today, prefix: :start_date %> 

in controller, make date object:

date.civil(params[:start_date][:year].to_i, params[:start_date][:month].to_i, params[:start_date][:day].to_i) 

activerecord expects attribute have 1 entry in params hash, date objects require multiple values. date helper date_select (not select_date) pass hash rails convert, multiparameter assignment, date during mass assignment.

<%= date_select :person, :birth_date %> 

if used date_select, you's see in params hash:

{:person => {'birth_date(1i)' => '2008', 'birth_date(2i)' => '11', 'birth_date(3i)' => '22'}} 

notice keys in :person hash describe order , type of multipart object rails can figure out how create attribute (for example, hash key birth_date(2i) second component of birth_date attribute in person model object , integer).


Comments

Popular posts from this blog

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

html - How to style widget with post count different than without post count -

url rewriting - How to redirect a http POST with urlrewritefilter -