I am having a bad time trying to get some form parameters (via a simple form, latest version), stored in an integer array in a PostgreSQL table. I have abstracted the key parts below, but if anyone would like to poke around, I have hosted the project on GitHub: https://github.com/cjbutcher/avc_risk_manager_2. Any help much appreciated, I have wrestled with this problem for days!
I am building a risk management app. A new risk should accept an integer from the 'impact' and 'likelihood' fields on the form view and insert them into arrays in the risk table. At the moment, all fields on the new/edit risk form update correctly, except impact and likelihood (the arrays). If I enter values in these fields, no error is thrown, yet they are not updated. Here is the code for the form. I don't think the problem lies here, but here it is anyway: app/views/shared/_risk_form.html.erb <%= simple_form_for(@risk) do |f| %> <%= render 'shared/error_messages', object: f.object %> <div class="form-group"> <%= f.input :title, required: false, :error => false, input_html: { class: 'form-control' } %> </div> <div class="form-group"> <%= f.input :description, required: false, :error => false, as: :text, input_html: { class: 'form-control description' } %> </div> <div class="form-group"> <%= f.input :area, :collection => ['Operations', 'IT', 'Finance'], required: false, :error => false, input_html: { class: 'form-control' } %> </div> <div class="form-group"> <%= f.input :owner, :collection => User.all, required: false, :error => false, input_html: { class: 'form-control' } %> </div> <div class="form-group"> <%= f.input :action, required: false, :error => false, input_html: { class: 'form-control' } %> </div> <div class="form-inline"> <span class="date-of-action-input"> <%= f.input :date_of_action, as: :date, :start_year => Date.today.year - 10, :end_year => 2030, :order => [ :day, :month, :year], :required => false, :error => false, input_html: { class: 'form-control' } %> </span> <span class="action-completed-input"> <%= f.input :action_completed, as: :boolean, required: false, :error => false, input_html: { class: 'form-control' } %> </span> <span class="impact-input"> <%= f.input :impact, required: false, :error => false, input_html: { class: 'form-control' } %> </span> <span class="likelihood-input"> <%= f.input :likelihood, required: false, :error => false, input_html: { class: 'form-control' } %> </span> <span class="submit-risk"> <%= f.button :submit, :error => false, :error => false, input_html: { class: 'form-control' } %> </span> </div> <% end %> Here is the controller, note the strong params for impact and likelihood: app/controllers/risk_controller.rb class RisksController < ApplicationController before_action :signed_in_user before_action :correct_user, only: [:destroy, :update] def create @risk = current_user.risks.build(risk_params) if @risk.save flash[:success] = "Risk created!" redirect_to root_url else render 'new' end end def new @risk = Risk.new end def destroy @risk.destroy redirect_to root_url end def edit @risk = Risk.find(params[:id]) end def update @risk = Risk.find(params[:id]) @risk.assign_attributes(risk_params) if @risk.changed? == false flash[:info] = "No changes were made" redirect_to root_url elsif @risk.update_attributes(risk_params) flash[:success] = "The risk has been updated." redirect_to root_url else render 'new' end end private def risk_params params.require(:risk).permit(:description, :title, :area, :owner, :action, :date_of_action, :action_completed, { :impact => [] }, { :likelihood => [] }) end def correct_user if current_user.admin? @risk = Risk.find_by(id: params[:id]) redirect_to root_url if @risk.nil? else @risk = current_user.risks.find_by(id: params[:id]) redirect_to root_url if @risk.nil? end end end Here is the model. I purposefully left validations off the impact and likelihood fields for now so I don't have to worry about that being the problem: app/models/risk.rb class Risk < ActiveRecord::Base belongs_to :user validates :user_id, presence: true validates :description, presence: true validates :title, presence: true validates :area, presence: true validates :owner, presence: true end Finally, here is the db schema: app/db/schema.rb ActiveRecord::Schema.define(version: 20140622153923) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" create_table "risks", force: true do |t| t.integer "user_id" t.string "description" t.datetime "created_at" t.datetime "updated_at" t.string "title" t.string "area" t.string "owner" t.string "action" t.date "date_of_action" t.boolean "action_completed", default: false t.integer "impact", default: [], array: true t.integer "likelihood", default: [], array: true end add_index "risks", ["user_id", "created_at"], name: "index_risks_on_user_id_and_created_at", using: :btree create_table "users", force: true do |t| t.string "name" t.string "email" t.boolean "admin", default: false t.datetime "created_at" t.datetime "updated_at" t.string "password_digest" t.string "remember_token" end add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree add_index "users", ["remember_token"], name: "index_users_on_remember_token", using: :btree end Any help much appreciated! If there is any extra information I can provide please let me know. Thanks v much, Chris -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscr...@googlegroups.com. To post to this group, send email to rubyonrails-talk@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/40d0611e-1b4c-4c98-8d66-342b9f28fbb2%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.