前提・実現したいこと
Ruby on Railsを使用しております。勉強期間1ヶ月の初心者です。
前提
ユーザーにいくつか構えている質問に答えてもらい、その質問に対しての答えを詳細としてみることができる、といった機能を作ろうとしております。
1人のユーザーが1つの質問に対しての答えは1つのみです。
テーブルとしては
user
question
answer
の3つです
発生している問題・エラーメッセージ
解決したいこととしては、詳細ページで1人のユーザーが行った、1つの質問に対しての答えを表示させたいがやり方が分からない。
外部キー(answerテーブルのquestion_id)とurl(params[:id])の id を一致させたい。
questionに対しての詳細なので、questionコントローラでの記述が必要だと思いshowアクションで試しで記述しておりますがこちらの記述だとanswerテーブルのidの取得になっており、questionと一致しておらずquestionの答えとして取得ができておりません。
非常に分かりづらい説明になっていると思いますが、何卒よろしくお願いいたします。
該当のソースコード
ruby
1[questions_controller.rb] 2 3class QuestionsController < ApplicationController 4 5 def index 6 @questions = Question.all 7 8 end 9 10 def show 11 @answer = Answer.find(params[:id]) 12 end 13 14 private 15 def answer_params 16 params.require(:answer).permit(:answer, :question_id) 17 end 18 19end
ruby
1[answer.rb] 2 3class Answer < ApplicationRecord 4 belongs_to :user 5 belongs_to :question 6 7 validates :question, presence: true 8 validates_uniqueness_of :question_id, scope: :user_id 9end
ruby
1[question.rb] 2 3class Question < ApplicationRecord 4 has_many :users, through: :answers 5 has_many :answers 6end 7
ruby
1[user.rb] 2 3class User < ApplicationRecord 4 devise :database_authenticatable, :registerable, 5 :recoverable, :rememberable, :validatable 6 7 # has_many :questions, through: :questions_users 8 has_many :answers 9 has_many :questions, through: :answers 10 11 validates :name, presence: true, uniqueness: true 12end
ruby
1[answers_controller.rb] 2 3class AnswersController < ApplicationController 4 5 def new 6 @question = Question.find(params[:question_id]) 7 @answer = Answer.new 8 end 9 10 def create 11 @question = Question.find(params[:question_id]) 12 @answer = Answer.new( 13 answer: answer_params[:answer], 14 question_id: params[:question_id], 15 user_id: current_user.id 16 ) 17 18 if @answer.save 19 redirect_to questions_path 20 else 21 render :new 22 end 23 end 24 25 private 26 def answer_params 27 params.require(:answer).permit(:answer, :question_id) 28 end 29 30end
haml
1[show.html.haml] 2 3.body 4 = render 'groups/header' 5 .contents 6 %p.hoge 7 = @answer.answer
ruby
1[routes.rb] 2 3Rails.application.routes.draw do 4 devise_for :users 5 root "groups#index" 6 resources :users, only: [:edit, :update] 7 resources :questions, only: [:index, :show] do 8 resources :answers, only: [:new, :create] 9 end 10end
ruby
1.body 2 3[index.html.haml] 4 5 = render 'groups/header' 6 .contents 7 .question 8 - @questions.each do |q| 9 .question__items 10 .question__items__item 11 =link_to new_question_answer_path(q.id), class:"question__items__item__box"do 12 = q.content 13 .question__items__show 14 = link_to question_path(q.id), class:"question__items__item__box" do 15 = "詳細"
試したこと
questionコントローラのshowアクションの記述の仕方について検索してみたが解決方法を見つけることができなかった。
補足情報(FW/ツールのバージョンなど)
Rubyバージョン 2.5.1
answerテーブル 例
|id|answer|qusetion_id|user_id|
|:--|:--:|--:|
|1|記入したanswer|1|1|
|2|記入したanswer|2|1|
回答1件
あなたの回答
tips
プレビュー