学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

【学習5.0】【MacOSX】コントローラ

「app\controllers」フォルダに「reviews_controller.rb」ファイルを新規作成してください。


app\controllers\reviews_controller.rb(新規作成したファイル)

class ReviewsController < ApplicationController

	def create
		@review = Review.create(review_params)
		project = @review.project

		redirect_to project
	end

	def destroy
		@review = Review.find(params[:id])
		project = @review.project
		@review.destroy

		redirect_to project
	end

	private
		def review_params
			params.require(:review).permit(:star, :comment, :project_id, :user_id)
		end
end



「app\controllers\project_controller.rb」ファイルに以下の記述を追加します。

記述追加 app\controllers\project_controller.rb(18~21行目)

    @review = Review.new
    @reviews = @project.reviews

    @hasReview = @reviews.find_by(user_id: current_user.id) if current_user



app\controllers\project_controller.rb

class ProjectController < ApplicationController

  before_action :authenticate_user!, only: [:list]

  def index
  	@projects = Project.all
  end

  def show
  	@project = Project.find(params[:id])
  	@tasks = @project.tasks.order(:tag)
    @joined = false
    if !current_user.nil? && !current_user.projects.nil?
      @joined = current_user.projects.include?(@project)
    end
    @users = @project.users.order('created_at desc').first(10)

    @review = Review.new
    @reviews = @project.reviews
    
    @hasReview = @reviews.find_by(user_id: current_user.id) if current_user
  end

  def list
    if !current_user.nil?
      @projects = current_user.projects
    end
  end
  
end



ルートの設定をします。


記述追加 config\routes.rb
23行目に「resources :reviews, only: [:create, :destroy]」の記述を追加しています。

Rails.application.routes.draw do

  devise_for :admin_users, ActiveAdmin::Devise.config
  ActiveAdmin.routes(self)
  
  devise_for :users, 
              path: '', 
              path_names: {sign_up: 'register', sign_in: 'login', edit: 'profile', sign_out: 'logout'},
              controllers: {omniauth_callbacks: 'omniauth_callbacks', registrations: 'registrations'}

  # ルートページをapp\views\pages\about.html.erbに設定
  root 'pages#about'  
  
  get 'pages/about'
  get '/myprojects' => 'project#list'
  get '/payment_method' => "users#payment"

  post '/free' => 'charge#free'
  post '/add_card' => "users#add_card"

  resources :project do
    resources :task, only: [:show]
    resources :reviews, only: [:create, :destroy]
  end

  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end