もう一度、stackoverflowコミュニティ!Rails 3.1のネストされた登録データとDevise
私はRailsに簡単なブログシステムを書くことに取り組んでおり、私は認証のためにDeviseを使っています。
私は基本的な電子メール/パスワード登録を行っていますが、ユーザーテーブル(deviseによって生成された基本的なもの)とUserDataテーブルの1対1接続を設定しました。 、アクセス許可、aboutなどが含まれます。
これはかなり簡単です。ユーザーテーブルは100%deviniバニラであり、has_one UserDataです。 ユーザデータはユーザに属します。
私はDeviseによって生成されたサインアップフォームを拡張して、ユーザーが自分の電子メールとパスワードだけでなく、希望のユーザー名も入力できるようにしました。 フォームが送信されるときに、フォームフィールドの名前が正しい場合(ユーザーの電子メールの「電子メール」やユーザーの電子メールの「UserData [名前]」など、ネストされたハッシュの正しい構造)新しいユーザが自動的に作成され、正しい対応するUserDataエントリは、もRailsによって自動的に作成されるはずですか?
は今、私はUserDataの[名前]フィールドはまったく表示されないとの大きな問題を抱えている... は、ここで私はとのトラブルを抱えているファイル...
new.html.erbです
<%= 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>
#This is the tidbit that doesn't work
<%= f.fields_for "UserData" do |ud_f| %>
<%= ud_f.label "username" %>
<%= ud_f.text_field :name %>
<% end %>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<div><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></div>
<div><%= f.submit "Sign up" %></div>
<% end %>
<%= render :partial => "devise/shared/links" %>
私は何時間も何時間も答えを探していましたが、無駄です。 fields_forブロックで意図的に "UserData"という単語のスペルを間違えた場合は、フィールドを出力します。これは奇妙なことですが、そのフィールドが消えていくのは何もわかりません...
私は本当に少し助けていただきありがとうございます! お時間をありがとう! :)
編集1 + 2:
数いじり、私は上書きしました工夫のデフォルトの登録コントローラの後とは自分が作成しました。 timbrandesが提案しているようにカスタムコントローラを呼び出すdeviseルートを編集しましたが、私のコントローラで@userにアクセスできないようです。ここで私がこれまで持っているコード...
class RegistrationsController < Devise::RegistrationsController
def new
resource = build_resource({})
resource.UserData = UserData.new
respond_with resource
end
def create
logger.debug "\n\n\nIN CREATE\n\n\n\n"
logger.debug params.to_json
super
end
def update
super
end
end
おかげでこれが動作します私の現在の
registrations_controller.rb
です。私はあなたの提案を試みましたが、残念ながら私はdevuserの登録コントローラで@userにアクセスできないようです。最初の投稿を更新して詳細とコントローラコードを追加しました。 –OKだから、Deviseは@userオブジェクトや@adminオブジェクトではなく、リソースと呼ばれるオブジェクトを扱います。この方法では、すべてが関連するモデルから独立しており、柔軟性があります。 'resource.user_data.build'を呼び出すことを試みてください。しかし、あなたが' user'リソース以外のものを持っている場合、このコントローラはおそらく壊れることに注意してください。このコードを必ず読んでくださいhttps://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb - 幸運:) –
うーん、これは変です...私はモデルを更新しましたしかし、 'resource.UserData.build'はまだエラーを起こしていましたので、フォームを表示させる' resource.UserData = UserData.new'に切り替えましたが、ユーザ名フィールドの名前は 'name =" user [UserData_attributes] [name ] "'、これは正しく表示されません - それは 'name =" user [UserData] [name] "'ではないでしょうか?このフォームを送信すると、次の警告が表示されます。「警告:保護属性を大量に割り当てることはできません:UserData_attributes」私はどこにでも宣言されたその特定のフィールドを持っていないので、不思議です。 (メインポストのモデルを更新しました) –