2

私はユーザーと製品のモデルを持っています。ユーザーの表には「割引」フィールドがあります。私はすべての価格と与えられた割引を乗算するユーザー/インデックスビューからメソッド "apply_discount"を呼び出そうとしています。 ユーザー/ index.html.haml:特定のメソッドを呼び出そうとしています - ルーティングエラー

- @users.each do |user| 
# user data 
    = form_tag(action:'apply_discount', method: :put) do 
    = number_field_tag :discount 
    = submit_tag 

がUserControllerは "apply_discount" という名前のメソッドを持っています。私は、フォームを送信する際 私の問題は、エラーをルーティングされます。

はlocalhost:3000 /資産アクション= apply_discount &コントローラ=ユーザー&方法= [POST] "/資産"

Noルートの一致を入れません?このフォームが資産を要求する理由を教えてください。そして正しい要求をする方法。

答えて

1

あなたのURLにこれを置くと、フォームタグに誤った構文が含まれている可能性があるため、問題がルーティングエラーであるとは思われません。

?アクション= apply_discount &コントローラ=ユーザー&方法は=

を入れ

<%= form_tag(:controller => "foo", :action => "bar", :method => "post" %> 
<% end %> 

ようになるはずです、あなたは、コントローラ

中に取得したいされているアクションのためのルートを設定している必要があります

このガイドを参照してください。

+0

D'oh!私はルートを忘れていた。 "routes.rbの" users/apply_discount "を投稿すると私の問題が解決します。なぜこのフォームがアセットをリクエストしようとしているのだろうと思っています。ありがとう! – user1201917

+0

すべてのコードを投稿できますか? –

0

実は、私はroutes.rbを内の対応良いルートがない場合、それはURLがあることになることを発見しました:

/assets?controller=xxx&ampaction=yyy 

それがルートを見つけた場合、あなたが正しい

/xxx/yyy 
を取得します

(xxxはコントローラで、yyyは指定したアクションです)。

したがって、REST-ful以外のURLを作成する場合は、最初にルートテーブルに追加することをお勧めします。

関連する問題