3

こんにちは私はデバイスを使用してユーザーを登録し、ユーザーがサインアップするたびにユーザーに関連するプロファイルを作成したいのですが、登録ビューのプロファイルモデルから人のフルネームを追加しようとすると問題が発生しますdeviseのユーザー登録画面が表示されない...

これは私のモデルです:

class User < ActiveRecord::Base

  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :profile_attributes

  has_one :profile, dependent: :destroy
  accepts_nested_attributes_for :profile
  # attr_accessible :title, :body 
end

これはプロファイルモデルです

class Profile < ActiveRecord::Base
  attr_accessible :email, :name, :phone, :code
  belongs_to :user

  validates_presence_of :user
end

そして、これは変更されたデバイスビューです:

<% provide(:title, 'Sign up' ) %>
<h2>Sign up</h2>

<div class="row">
  <div class="span6 offset3">

    <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
      <%= render 'shared/error_messages', object: resource %>

      <%= f.fields_for :profile do |profile_form| %>
        <%= profile_form.label :full_name %>
        <%= profile_form.text_field :name %>
      <% end %>

      <%= f.label :email %>
      <%= f.email_field :email %>

      <%= f.label :password %>
      <%= f.password_field :password %>

      <%= f.label :password_confirmation %>
      <%= f.password_field :password_confirmation %>

      <div class="form-actions">
        <%= f.submit "Sign up", class: "btn btn-large btn-primary" %>
      </div>
    <% end %>

    <%= render "devise/shared/links" %>

  </div>
</div>

名前のテキストフィールドが表示されない理由がわかりません...

ご協力ありがとうございました

4

2 に答える 2

5

それを考え出した、それはとても簡単だったので気分が悪くなった...だからここにある:

フォームで新しいプロファイルを生成するのを忘れたので、最終的には次のようになります。

.
.
.

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
      <%= render 'shared/error_messages', object: resource %>

      <div class="invisible">
        <%= resource.build_profile %>
      </div>

      <%= f.fields_for :profile do |profile_form| %>
        <%= profile_form.label :full_name %>
        <%= profile_form.text_field :name %>

      <% end %>

      <%= f.label :email %>
      <%= f.email_field :email %> 

.
.
.

これが他の誰かの問題も解決することを願っています!

ありがとうございました!

于 2012-09-09T17:59:07.137 に答える
0

この質問はすでに回答されていますが、他の人の代わりとしてこれを投げると思いました。フォーム バッキング オブジェクトを使用して、1 つのフォーム/1 つのモデルの種類のセットアップに戻り、コードをよりクリーンに保つことができます。

ここに良い記事があります: http://pivotallabs.com/form-b ​​acking-objects-for-fun-and-profit/

于 2013-04-28T14:28:04.257 に答える