2017-08-30 13 views
-1

私はRails 5を使用しています。あまりにも多くのコードを複製しないように、オブジェクトの作成と更新の両方に同じフォームを使用したいと思います。私は、コントローラの...Railsでは、オブジェクトの作成と更新の両方に同じフォームを使用するにはどうすればよいですか?

def create 
    @user_notification = UserNotification.new(user_notification_params) 
    ... 
    end 

および更新するための更新方法を作成するためのメソッドを作成し提出するフォームをしたいと思います...

def update 
    ... 
    end 

私が作成するため正常に動作します。このフォームを、持っています...

<%= form_for @user_notification, :url => user_notifications_path do |f| %> 
    <%= f.hidden_field :id %> 
    ... 
    <div class="field"> 
    <%= f.label :price, 'Price' %> <span class="required">*</span> <br> 
    <%= f.text_field :price, :size => 30 %> 
    </div> 
    ... 

それが更新に来るとき、私は私の更新要求を提出する時にこのエラーが出る...

No route matches [PATCH] "/user_notifications" 

私のconfig/routes.rbをファイル

resources 'user_notifications' 

でこれを定義している。しかし、私はこの問題は、ルートの問題よりも深い感じます。フォーム定義を調整するにはどうしたらいいですか?作成と更新の両方に同じ部分を使用する方法はありますか?そうであれば、上記にどのような調整が必要ですか?必ずファイル名の前

にし、中に_を追加してください:あなたがここにrails render guilde を支援するためのレンダリングに使用できる

+0

これを理解する最も簡単な方法は、足場を生成することです。足場は、作成アクションと編集アクションの両方で使用する部分的なフォームを含む、デフォルトのビューを提供します。 – hashrocket

答えて

1

私はあなたがいる可能性があり、問題は、あなたが明示的にフォームでURLを設定しているということだと思います。

form_for @user_notification, :url => user_notifications_path 

user_notifications_pathは、要求方法に応じて2つの経路に一致します。 user_notifications_pathとGETを使用すると、インデックスアクションに一致し、POSTが作成アクションに一致します。

user_notification_pathが必要な場合は、それが単数であることに注意してください。このヘルパーは、GET要求のshowアクション、PUT/PATCH要求のアクションの更新、DELETE要求のアクションの破棄に一致します。 form_forを使用する場合は、明示的にURLを設定せずに所望の効果を得ることができる必要があり

form_for @user_notification 

は、Railsは自動的に@user_notificationでモデルが新しいかどうかに基づいて、正しいURLとリクエストメソッドを設定します記録するかどうかを決定し、正しいルートを自動的に見つけようとします。

0

は、サンプルコードでは、

最初に注意(_user_notification.html.erbするフォームの名前を変更であなたはnew.html.erbとedit.html.erb、使用することは、それを呼び出すためにレンダリング

<%= render 'user_notification' %> 
関連する問題