Я пытаюсь создать форму, которая обновляет 2 таблицы в моей базе данных. Я не совсем уверен, как создать эту контактную форму. Поэтому моя первая краткосрочная цель - просто обновить таблицы contact_requests
и users
. Я намерен сделать связь one to many
между users
и contact_requests
. Это позволяет одному user
иметь много contact_requests
. Я новичок в рельсах, поэтому чувствую, что в моем коде есть пробелы, и я делаю некоторые ошибки. В идеале позже, я хотел бы включить в форму формуляр, но один шаг за раз.Создание формы контакта, которая обновляет 2 таблицы
Я в настоящее время user
стола и contact_request
стола:
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
Я получаю эту ошибку:
форма:
<%= 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 %>
Ryan-Я думаю, ему также нужно положить accepts_nested_attributes_for. Кроме того, это будет означать, что вам, вероятно, понадобится синтаксис, например <% = f.text_field («user [first_name]», ...%> –
@JasonFB Я бы использовал для этого поля fields_for, вместо того, чтобы поместить пользовательский параметр. –