2017-12-10 6 views
0

ここに新しい「開発者」があります。私は既存のアプリケーションのためのフォームを作成する方法を学ぼうとしており、私は髪を裂いています。
コントローラ:特定のコントローラのメソッドにフォームを送る方法は?

class DigitalRecipientsController < ApplicationController 
    def update 
     @line_item = line_item params[:id] 
     @recipients = @line_item.recipients 
     recipient = @recipients.create! :name => @new_name, :email => @new_email 
    end 
end 

routes.rbを:

resources :digital_recipients 

テンプレートhtml.erb、(@のline_items.eachのループ内| LINE_ITEM |):

<%= form_for line_item, :url => {:controller => 'digital_recipients', :action => 'update'} do |f| %> 
    <%= f.label 'name: ' %><%= f.text_field(:name, value: @new_name) %> 
    <%= f.label ', email: ' %><%= f.text_field(:email, value: @new_email) %> 
    <%= f.submit %> 
<% end %> 

これはスロー例外:

No route matches {:action=>"update", :controller=>"digital_recipients"} 

私は何を理解していないのですか?このフォームをそのコントローラのメソッド 'update'にどのように向けるのですか?

ご協力いただければ幸いです。どうもありがとうございます。

+0

を試してみてください?問題はルートの定義方法にあります。 –

+0

私はそうですが、それは空です。 –

+0

ルートには注意してください。アンダースコアは単語区切りとして理解されています。下線付きのリソースを根絶する問題があります。あなたのリソースを 'digital_recipients'のままにしたい場合は、initializers/inflections.rbに追加しなければならないかもしれません(あなたのコントローラをform_forに書いても、HTMLビューのURLとして翻訳されますそれはルーティングの問題です) – Maxence

答えて

0

あなたはDigitalRecipientsモデルを持っています。この

<%= form_for line_item, url: digital_recipient_path(line_item), method: :put do |f| %> 
    <%= f.label 'name: ' %><%= f.text_field(:name, value: @new_name) %> 
    <%= f.label ', email: ' %><%= f.text_field(:email, value: @new_email) %> 
    <%= f.submit %> 
<% end %> 
関連する問題