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:

https://lh5.googleusercontent.com/-qZtDF_xGMys/VHpT5tg4SMI/AAAAAAAAAGM/WB4j3-K3p08/s1600/Screen%2BShot%2B2014-11-29%2Bat%2B2.48.18%2BPM.png

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

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

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

class ContactRequest < ActiveRecord::Base
  belongs_to :user
  validates :user_id, presence: true
  validates :message, presence: true, length: { maximum: 500 }
end

class ContactController < ApplicationController
  def new
  @user = User.new
  @contact_request = ContactRequest.new
  end
end

I am getting this error:

https://lh4.googleusercontent.com/-MRCqb9NOm6A/VHpTtDohT-I/AAAAAAAAAGE/hqgxKaH07bE/s1600/Screen%2BShot%2B2014-11-29%2Bat%2B2.34.29%2BPM.png

form:

<%= 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”) %>

-Jason

  end
  end
end
    @contact_request = ContactRequest.new

form:



To view this discussion on the web visit
https://groups.google.com/d/msgid/rubyonrails-talk/6f73f2d0-e80d-4ff1-89a0-1e1b63ffa3ac%40googlegroups.com
https://groups.google.com/d/msgid/rubyonrails-talk/6f73f2d0-e80d-4ff1-89a0-1e1b63ffa3ac%40googlegroups.com?utm_medium=email&utm_source=footer.
For more options, visit https://groups.google.com/d/optout
https://groups.google.com/d/optout.


Jason Fleetwood-Boldt
[email protected]

All material © Jason Fleetwood-Boldt 2014. Public conversations may be
turned into blog posts (original poster information will be made
anonymous). Email [email protected] with questions/concerns about
this.