0

Devise ユーザー登録ビューにフォーム フィールドを追加しようとしています。これは達成されており、フォームを送信すると検証が実行されます。ただし、フォーム エラーが発生した場合、入力データは元のフォームに従ってフォーム フィールドに再入力されませんが、開発ビューに追加した小さなデバッガーで正しい値を確認できます。

これが私の見解です:

<h2>Sign up</h2>

<% resource.build_profile %>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
    <%= devise_error_messages! %>

    <div><%= f.label :email %><br />
    <%= f.email_field :email %></div>

    <div><%= f.label :username %> <i>(this cannot be changed so choose wisely)</i><br />
    <%= f.text_field :username %></div>

    <div><%= f.label :password %><br />
    <%= f.password_field :password %></div>

    <div><%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation %></div>

    <%= f.fields_for :profile do |profile_form| %>
        <div><%= profile_form.label :full_name %><br />
        <%= profile_form.text_field :full_name %></div>

        <div><%= profile_form.label :birth_date %><br />
        <%= profile_form.date_select :birth_date, start_year: Time.now.year, end_year: Time.now.year - 80, order: [:day, :month, :year], prompt: { day: 'Choose day', month: 'Choose month', year: 'Choose year' } %></div>

        <div><%= profile_form.label :gender %><br />
        <%= profile_form.select :gender, { "Male" => '0', "Female" => '1' } %></div>

        <div><%= profile_form.label :postcode %><br />
        <%= profile_form.text_field :postcode %></div>

        <div><%= profile_form.label :description, "About you" %><br />
        <%= profile_form.text_area :description %></div>
    <% end %>

    <div><%= f.submit "Sign up" %></div>
<% end %>

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

Gem 内で Devise コードを使用しているため、表示するコントローラー コードはありません。私が間違っている/していないことは何ですか?

4

3 に答える 3

1

カルロスの答えは、この正確な問題を解決するのに役立ちました。

resource.build_profile unless resource.profile
于 2012-05-30T08:02:21.770 に答える
1

で毎回プロファイルを再構築していますbuild_profile。これは、フォームが再表示されるときに、エラーのあるプロファイルではなく、プロファイルの新しいインスタンスを使用していることを意味します。そのコードを変更して、プロファイルが存在しない場合にのみプロファイルを作成するようにします。

resource.build_profile unless resource.profile

そのようなものがうまくいくはずです。

于 2012-05-27T17:26:05.160 に答える
0

ユーザー モデルにプロファイル モデルへの参照がある場合は、渡してみてください

<%= f.fields_for resource.profile do |profile_form| %>

現在、モデルへの参照を渡していますが、フォームはインスタンスを必要としています。

于 2012-05-27T16:25:40.807 に答える