2016-05-28 18 views
1

RubyとRailsを初めて使用しています。 私はコース提供のリストを表示するビューを持っています。Ruby on Rails:ビューから特定のモデルのコントローラメソッドを呼び出す

<% if [email protected] %> 
    ..... 
<% @offerings.each do |offering| %> 
    <tr> 
     <td><%=offering.semester %></td> 
     <td><%=offering.location %></td> 
    </tr> 
    <%end %> 

私は、各製品に関連付けられている登録]ボタンを追加する必要があります。この登録ボタンは、特定のオファリング容量属性を減らすオファリングコントローラメソッドを呼び出す必要があります。

各ボタンをそれぞれの提供品にバインドするにはどうすればよいですか?あるいは、コントローラメソッドにパラメータとして正しいオファリングをどのように渡すことができますか?

答えて

0

このように、別の<td>を追加します。

<td><%= button_to "Enroll", enroll_offering_path(offering) %></td>

enroll_offering_pathのために働く:

<td><%= link_to "Enroll", your_method_path(offering) %></td> 
+0

私はこれをオンラインで見ましたが、your_method_path(オファリング)に何が入るのか非常に混乱していますか? – bzak

+0

config/routes.rbにあなたのメソッドへのルートを追加しなければなりません。次に、パスを見つけるために、ターミナルでこれを使うことができます:rake routesそしてあなたのメソッドのパスを教えてくれます。 – Pholochtairze

+0

あなたはもっと具体的にしてください、私は非常にレールに新しいです。私はRakeルートを実行しています。PUT /offerings/:id(.:format)offerings#update。 – bzak

0

あなたはこのように、デフォルトでPOSTリクエストを提出するbutton_to方法を、使用することができます必要なもの:

  • A PUT /offerings/:id/enrollルート:

    # config/routes.rb` 
    
    resources :offerings do 
        post 'enroll', on: :member 
    end 
    
  • #enrollコントローラのアクション:

    # app/controllers/offerings_controller.rb 
    
    class OfferingsController < ApplicationController 
        ... 
        def enroll 
        # Here you would do something like... 
        @offering = Offering.find(params[:id]) 
        @offering.decrement!(:capacity) 
        end 
    end 
    

あなたは、このすべてがhereをどのように機能するかについての詳細を読むことができます。

関連する問題