2013-08-20 35 views
0

最後我能解決這個問題如何實現表單對象

我嘗試實施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 - 不知道這是否重要。

如果您需要任何其他信息,請不要猶豫,讓我知道。

回答

2

在你爲personForm類,你有這些屬性:

attribute :person_first_name, String 
attribute :person_last_name, String 

但在你new.html.erb,你剛纔提到:FIRST_NAME和:姓氏。您需要更改PersonForm以使用:first_name和:last_name,或更改要使用的模板:person_first_name和:person_last_name。

+0

哎!你是對的!我糾正了這個錯誤,但代碼仍然不工作...請appologize,但我會回收這個線程來解決整個問題。希望這是好的... – speendo

1

創建方法應改爲重定向到@ person_form.person。 嘗試

def create 
@person_form = PersonForm.new(person_form_params) 
@person_form.save 

redirect_to person_path(@person_form.person) 
end