Updating 2 tables from contact Form

I am trying to create a form that updates 2 tables in my database. I’m not quite sure how to build this contact form quite yet. So my first short term goal is to simply update my contact_requests and users tables. I am aiming to do a one to many relationship between users and contact_requests. This allows one user to have many contact_requests. I am new to rails so I feel like there are gaps in my code and I am making some mistakes as well. Ideally, I will want to include a mailer in the form as well but one step at a time.

I currently have a user table and a contact_request table:

user_id from the contact_requests table is a foreign key that references users.id

Here is by current schema code:

ActiveRecord::Schema.define(version: 20141127114323) do

create_table “contact_requests”, force: true do |t|

t.datetime “created_at”, null: false

t.datetime “updated_at”, null: false

t.string “message”, null: false

t.integer “user_id”


add_index “contact_requests”, [“user_id”], name: “index_contact_requests_on_user_id”, using: :btree

create_table “users”, force: true do |t|

t.datetime “created_at”, null: false

t.datetime “updated_at”, null: false

t.string “first_name”, null: false

t.string “last_name”, null: false

t.string “email”, null: false

t.string “phone_number”



Here are my models and controllers:

class User < ActiveRecord::Base

has_many :contact_requests

validate the presence of the attributes

validates(:first_name, presence: true)

validates(:last_name, presence: true)

validates(:email, presence: true)


class ContactRequest < ActiveRecord::Base

belongs_to :user

validates :user_id, presence: true

validates :message, presence: true, length: { maximum: 500 }


class ContactController < ApplicationController

def new

@user = User.new

@contact_request = ContactRequest.new



I am getting this error:


<%= form_for(:contact, remote: true, class: “contact-input”) do |f| %>

<%= f.text_field(:user, :first_name, class: “form-control”, placeholder: “First name”)%>

<%= f.text_field(:user, :last_name, class: “form-control”, placeholder: “Last name”) %>

<%= f.email_field(:user, :email, class: “form-control”, placeholder: “Email”) %>

<%= f.telephone_field(:user, :phone_number, class: “form-control”, placeholder: “Phone number”) %>

<%= f.text_area(:contact_request, :message, class: “form-control contact-margin”, rows: “8”, placeholder: “Message…”) %>

<%= f.submit(class: “btn btn-xl”) %>

<% end %>

You need to add accepts_nested_attributes_for :user to your ContractRequest model and then your style of referencing those fields in your form changes to something like

<%= f.text_field(“user[last_name]”, class: “form-control”, placeholder: “Last name”) %>

I think that should do the trick but read up on accepts_nested_attributes_for cause it’s a little tricky to get it right.

come to think of it on 2nd thought maybe it’s

<%= f.text_field(“user_attributes[last_name]”, class: “form-control”, placeholder: “Last name”) %>