Q&A
やりたいこと
railsでQ&Aサイトを作っています!
投稿詳細画面にて回答が複数表示されています、ベストアンサーに選ばれた回答に、「ベストアンサーに選ばれた回答です」と表示させたいのですが、数多くある回答から、ベストアンサーに選ばれた回答を取得する方法がわかりません。。。
コードは下記のようになっています。
コード
model↓
ruby
1class User < ApplicationRecord 2 has_many :posts, dependent: :destroy 3 has_many :answers, dependent: :destroy 4 has_many :best_answer, dependent: :destroy 5 6 def already_bestanswered?(post) 7 self.best_answer.exists?(post_id: post.id) 8 end 9end 10 11 12class Post < ApplicationRecord 13 belongs_to :category 14 belongs_to :user 15 has_many :answers, dependent: :destroy 16 has_one :best_answer, dependent: :destroy 17end 18 19 20class Answer < ApplicationRecord 21 belongs_to :post 22 belongs_to :user 23 has_one :best_answer, dependent: :destroy 24end 25 26class BestAnswer < ApplicationRecord 27 belongs_to :answer 28 belongs_to :post 29 belongs_to :user 30 validates_uniqueness_of :post_id, scope: :user_id 31end
posts_controller.rb↓
ruby
1class PostsController < ApplicationController 2 def show 3 @best_answers = BestAnswer.find_by(post_id: params[:id]) 4 @post = Post.find(params[:id]) 5 end 6end
show.html.erb
ruby
1 <% if @post.user.already_bestanswered?(@post) %> 2 <% if @post.best_answer %> 3 <p>ベストアンサーに選ばれた回答です</p> 4 <% end %> 5 <% else %> 6 <% if @post.user_id == current_user.id %> 7 <%= link_to "#exampleModal", :data => {:toggle=>"modal", :role => "dialog"}, :class=>"btn btn-outline-danger" do %> 8 ベストアンサーにする 9 <% end %> 10 <% end %> 11 <% end %>
すべての回答に「ベストアンサーに選ばれた回答です」の表示が出てしまいます。。。実際ベストアンサーになっているのは1つ目の回答のみとなっております。
どのようにすれば、ベストアンサーに選ばれた回答のみに「ベストアンサーに選ばれた回答です」と表示させることができますでしょか??ご教授願います。。
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2019/08/16 13:21 編集