非常にシンプルなソーシャルネットワークを作りたかったのです。私は2つのモデルから始めました:ユーザー(Devise gemを使って)と彼のプロフィール。彼らは、1対1の関係で接続されているので、私のルートは次のようになります。Rails 3の単一リソースモデルにバリデーションを追加できません
resources :users do
resource :profile
end
私は適切なコントローラを持っている - ここでは、プロファイルを作成するためのコード(編集はほとんど同じである)です。
def new
@profile = current_user.create_profile
end
def create
@profile = current_user.profile.create(params[:profile])
if @profile.save
redirect_to user_profile_path(current_user)
else
render :action => "new"
end
end
は、
私はcurrent_user変数を使用しました。なぜなら、ユーザーはアドレスバーに何を入力していても、他のユーザーのプロフィールを作成することができないからです。ユーザーがプロファイルにデータを追加することができますし、「保存」打った後、その新たに作成されたにリダイレクトされている - 私が期待と同じように働いている
- form_for [@profile.user, @profile] do |p|
(fields omitted)
:私はフォームを持っている「新しい」ビューで
ページ。しかし、私はProfileモデル( validates_presence_of のようにもシンプルなもの)にいくつかの検証を追加して、新しいプロファイルを作成しようとすると、私のコントローラがエラーを私に示しています
undefined method `user_profiles_path' for #<#<Class:0xb2d3e5c>:0xb2d2728>
Extracted source (around line #1):
1: - form_for [@profile.user, @profile] do |p|
それは奇妙だが、この問題にはありません新しいプロファイルを作成しようとしている間のみ、プロファイル情報の更新時に発生します。私は、form_forヘルパーでリダイレクトURLを指定するように指示する解決策を探った。だから私は私の見解でそれを変更しました:
- form_for [@profile.user, @profile], :url => user_profile_path(@profile.user) do |p|
まだ動作しません。それは私が望んでいたビューが表示されます(最初から検証エラーメッセージでは、私は;-)それと住むことができる)が、「保存」打った後、それは別の問題を生成します。
undefined method `create' for nil:NilClass
私もそれを見つけますより詳細には、エラーの詳細にパラメータオブジェクトを表示するので、適切なデータが含まれていますが、すべてがnilではありません。私はアイデアがなくなり、間違っている可能性があります。
私はちょっと不思議です。何が私の問題の原因となり、それを修正するのですか?
ありがとうございます!
当時1つの質問をしないようにしてください –