2017-04-12 4 views
1

ここで私を助けることができるかどうかわかります。これはしばらくの間固まっている。私は現在のログインしているユーザーがその特定のコースに登録されていることを示すコース表示ページにボタンを表示しようとしています。 (本質的には、サブスクリプションモデルにuser_idとcourse_idを追加するだけです)。Railsのshowページのボタンを使ってサブスクリプションモデルにユーザーを追加する

私は完全に間違った方向に行っているかもしれません - 私はuser_idとcourse_idを取り込むことができるサブスクリプションモデルを作成しました。私は上記のデータをサブスクリプションモデルに入力できるようにするコースコントローラに登録クラスを作成しようとしています。私は新しいサブスクリプションコントローラを作ってそこから作業したくなかった。データを取得してサブスクリプションモデルで作成するコースコントローラで定義されたクラスを持つことは可能ですか?

DBをSQliteプログラムで手動で入力することができます。私は、登録ユーザーのこのデータを呼び出して、コースショーページの下部に表示することができます。私の問題は、登録ボタンを使ってこの追加を自動化することです。どんな助けもありがとう。コードが追加されました。

コースコントローラ:

def enroll 
@subscription = Subscription.new(params[:current_user.id, :id]) 

@subscription.save 
end 

プライベート

def course_params 
    params.require(:course).permit(:title, :description, :price, :category_id, :course_img, :venue, :max_enrolment, :course_reference, :short_description, :duration_days, :duration_weeks, :start_date, :start_time, :end_date) 
end 

ルートコード:

Rails.application.routes.draw do 

    get 'pages/about' 

    get 'pages/contact' 

    devise_for :users 
    resources :courses do 
    post :enroll 
    collection do 
     get 'search' 
    end 
    end 

レーキルートは、私にはよさそうだこれはこのことを示しています。

course_enroll POST /courses/:course_id/enroll(.:format) courses#enroll 

表示するページ

<%= link_to "Enroll", course_enroll_path(@course), class: "btn-enroll" %> 

ルーティングエラー

No route matches [GET] "/courses/1/enroll" 

コースモデル

belongs_to :user 
    belongs_to :category 

    has_many :subscriptions 

Userモデル

has_many :courses 
    has_many :subscriptions 

サブスクリプションモデルで、私はそれがGETアクションを必要とするかもしれませんが、これについて移動する最良の方法は何かを理解し

class Subscription < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :course 
end 

?または私はちょうどサブスクリプションコントローラを作成せず、これのためのコースコントローラを使用しようとする全く間違った方法を行っています。みんなありがとう。

答えて

1

方法が指定されていない限り、デフォルトの方法はGETになりますので、あなたは、あなたのlink_toヘルパーの中にメソッドを宣言する必要があります:

<%= link_to 'Enroll', course_enroll_path(@course), class: 'btn-enroll', method: :post %> 

そして、私はあなたが新しいを作成しようとしている方法を気づきました新しいレコードの場合はcourse_iduser_idが必要ですが、current_user.idは送信されておらず、@courseオブジェクト全体を送信しているため、登録メソッド内のsubscriptionは多分別のエラーを投げます。

私はcourses_controllerでこの変更を行なったし、首尾よく働いた:新しいレコードを作成するために

# app/controllers/courses_controller.rb 
def enroll 
    @subscription = Subscription.new(course_id: params[:course_id], user_id: params[:user_id]) 
    @subscription.save 
end 

プラスのparamsでの編集を:

<%= link_to 'Enroll', course_enroll_path(course, user_id: current_user.id), method: :post %> 
+0

はそんなにセバスティアンありがとうございます。私は方法について考えることを止めたことはありません。:方法を経路上の順序で実行するので、メソッドを取り上げなかったことを通知して実現します。私は大学からこれを覚えています。感謝万円。 また、私はサブスクリプションが作成されたが、データが入っていないことを知った後で、余分な訂正のために素晴らしいものを手にしていました。もう一度ありがとう。ヒーロー! – Bradley

+0

こんにちはセバスチャン、それをマークしようとしましたが、私のレベルが十分に高くなければ、投票が記録されますが、公開されていません。答えにもう一度感謝します。 – Bradley

+0

ああ、正直言って私はそれが受け入れられたボタンであることに気付かなかった。最近はそれほど価値があるとは思っていません。ここには初心者がいます。ありがとうセバスチャン。 – Bradley

関連する問題