2014-11-29 2 views
0

Я пытаюсь создать форму, которая обновляет 2 таблицы в моей базе данных. Я не совсем уверен, как создать эту контактную форму. Поэтому моя первая краткосрочная цель - просто обновить таблицы contact_requests и users. Я намерен сделать связь one to many между users и contact_requests. Это позволяет одному user иметь много contact_requests. Я новичок в рельсах, поэтому чувствую, что в моем коде есть пробелы, и я делаю некоторые ошибки. В идеале позже, я хотел бы включить в форму формуляр, но один шаг за раз.Создание формы контакта, которая обновляет 2 таблицы

Я в настоящее время user стола и contact_request стола:

enter image description here

user_id из contact_requests таблицы является внешним ключом, который ссылается users.id

Вот текущий код схемы:

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 

Это мои модели и контроллеры:

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 

Я получаю эту ошибку:

enter image description here

форма:

<%= form_for(:contact, remote: true, class: "contact-input") do |f| %> 
     <div class="col-md-12"> 
     <div class="col-md-6"> 
      <div class="contact-input-margin form-group"> 
      <%= f.text_field(:user, :first_name, class: "form-control", placeholder: "First name")%> 
      </div> 
      <div class="contact-input-margin form-group"> 
      <%= f.text_field(:user, :last_name, class: "form-control", placeholder: "Last name") %> 
      </div> 
      <div class="contact-input-margin form-group"> 
      <%= f.email_field(:user, :email, class: "form-control", placeholder: "Email") %> 
      </div> 
      <div class="contact-input-margin form-group"> 
      <%= f.telephone_field(:user, :phone_number, class: "form-control", placeholder: "Phone number") %> 
      </div> 
     </div> 
     <div class="contact-input-margin col-md-6"> 
      <div class="form-group"> 
      <%= f.text_area(:contact_request, :message, class: "form-control contact-margin", rows: "8", placeholder: "Message...") %> 
      </div> 
     </div> 
     </div> 
     <%= f.submit(class: "btn btn-xl") %> 
    <% end %> 

ответ

1

Эта ошибка происходит, потому что вы будете указать :user в качестве первого аргумента text_field:

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

Вам не нужно это делать, так как form_for позаботится об этом для вас. Только этот код будет делать:

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

Удалить :user от всех других областей тоже.

+0

Ryan-Я думаю, ему также нужно положить accepts_nested_attributes_for. Кроме того, это будет означать, что вам, вероятно, понадобится синтаксис, например <% = f.text_field («user [first_name]», ...%> –

+0

@JasonFB Я бы использовал для этого поля fields_for, вместо того, чтобы поместить пользовательский параметр. –

Смежные вопросы