最後我能解決這個問題如何實現表單對象
我嘗試實施on Rails的4紅寶石表單對象模式,我只是找不到我的錯誤。
我構造電話簿,其包括以下型號
人的樣品應用
- 如first_name
- 姓氏
******中國
- 數
電子郵件
- 地址
[編輯]
感謝@sockmonk我可以在這個代碼解決一個問題。它仍然是不工作...
這裏是我的代碼使用
# app/models/person.rb
class Person < ActiveRecord::Base
has_many :phone_numbers
has_many :emails
end
# app/controllers/people_controller.rb
class PeopleController < ApplicationController
def new
@person_form = PersonForm.new
end
def create
@person_form = PersonForm.new(person_form_params)
@person_form.save
redirect_to person_path(@person)
end
def index
@people = Person.all
end
def show
@person= Person.find(params[:id])
end
private
def person_form_params
params.require(:person_form).permit(:person_first_name, :person_last_name, :phone_number_number, :email_address)
end
end
# app/forms/person_form.rb
class PersonForm
include Virtus
include ActiveModel::Model
# extend ActiveModel::Naming
# include ActiveModel::Conversion
# include ActiveModel::Validations
attr_reader :person
attr_reader :phone_number
attr_reader :email
attribute :person_first_name, String
attribute :person_last_name, String
attribute :phone_number_number, Integer
attribute :email_address, String
def persisted?
false
end
def save
if valid?
persist
true
else
false
end
end
private
def persist
@person = Person.create(first_name: person_first_name, last_name: person_last_name)
@phone_number = @person.phone_numbers.create(number: phone_number_number)
@email = @person.emails.create(address: email_address)
end
end
# app/views/people/new.html.erb
<h1>New Person</h1>
<%= form_for :person_form do |f| %>
<p>
<%= f.label :person_first_name %> </ br>
<%= f.text_field :person_first_name %>
<p>
<%= f.label :person_last_name %> </ br>
<%= f.text_field :person_last_name %>
<p>
<%= f.label :phone_number_number %> </ br>
<%= f.text_field :phone_number_number %>
<p>
<%= f.label :email_address %> </ br>
<%= f.text_field :email_address %>
<% end %>
(發現整個代碼在https://github.com/speendo/Phonebook2)
順便說一句。正如你可能已經注意到的,我在這段代碼中使用了Virtus - 不知道這是否重要。
如果您需要任何其他信息,請不要猶豫,讓我知道。
哎!你是對的!我糾正了這個錯誤,但代碼仍然不工作...請appologize,但我會回收這個線程來解決整個問題。希望這是好的... – speendo