Я создаю приложение с моделью языка, модель вопроса и модель ответа. Я хотел бы, чтобы отобразить список вопросов и ответы на один «Мои вопросы» Индексный просмотр странице в следующих категории:Как классифицировать данные на одном виде
- Моих Вопросов без ответов (имеется в виде только вопросы, относящиеся к текущему пользователю)
- Моим Ответили Вопросы (то есть только вопросы, относящиеся к текущему пользователю)
- вопросов Я ответил (смысл только ответы, относящиеся к текущему пользователю)
Я новичок в программирование, и я не уверен, что если исследующее слово «категория» в Rails был правильным для этого, bu Я так и не смог найти полезную информацию. Любое понимание было бы высоко оценено!
Вот мои маршруты:
Languagecheck::Application.routes.draw do
devise_for :users
resources :users
resources :languages do
resources :questions, except: [:index] do
resources :answers
end
end
resources :questions, only: [:index, :new, :create]
get 'about' => 'welcome#about'
root to: 'welcome#index'
end
Вот мой вопрос модель:
class Question < ActiveRecord::Base
require 'obscenity/active_model'
has_many :answers, dependent: :destroy
accepts_nested_attributes_for :answers, :reject_if => :all_blank, :allow_destroy=>true
belongs_to :user
belongs_to :language
default_scope { order('created_at DESC') }
validates :body, obscenity: true
validates :body, length: { minimum: 10, maximum: 160 }, presence: true
validates :user, presence: true
end
Вот мой ответ Модель:
class Answer < ActiveRecord::Base
require 'obscenity/active_model'
belongs_to :question
belongs_to :user
validates :name, obscenity: true
validates :body, length: { minimum: 1, maximum: 160 }, presence: true
end
Моя модель пользователя устанавливается где у пользователя много вопросов и ответов.
Вот мои вопросы управления:
class QuestionsController < ApplicationController
before_action :set_language, except: [:index]
before_action :set_question, only: [:show, :edit, :update, :destroy]
def index
@questions = current_user.questions
end
def show
@question = Question.find(params[:id])
@answer = Answer.new
end
def new
@question = Question.new
authorize @question
end
def edit
@question = Question.find(params[:id])
authorize @question
end
def update
@question = Question.find(params[:id])
authorize @question
if @question.update_attributes(question_params)
flash[:notice] = "Question was updated."
redirect_to [@language, @question]
else
flash[:error] = "There was an error saving the question. Please try again."
render :edit
end
end
def create
@question = Question.new(question_params)
@question.language = @language
@question.user = current_user
authorize @question
if @question.save
flash[:notice] = "Question was saved."
redirect_to [@language, @question]
else
flash[:error] = "There was an error saving the question. Please try again."
render :new
end
end
def destroy
@question.destroy.find(params[:id])
respond_to do |format|
format.html { redirect_to questions_url }
format.json { head :no_content }
end
end
private
def set_question
@question = Question.find(params[:id])
end
def question_params
params.require(:question).permit(:id, :body)
end
def set_language
@language = Language.find(params[:language_id])
end
end
Вот мой ответ контроллер:
class AnswersController < ApplicationController
before_action :set_language_and_question
before_action :set_answer, only: [:show, :edit, :update, :destroy]
def index
@answers = Answer.all
end
def show
end
def new
@answer = Answer.new
end
def edit
end
def create
@answer = Answer.new(answer_params)
@answer.question = @question
@answer.user = current_user
respond_to do |format|
if @answer.save
format.html { redirect_to [@language, @question], notice: 'Answer was successfully created.' }
format.json { render action: 'show', status: :created, location: @answer }
else
format.html { redirect_to [@language, @question], error: 'Answer was not successfully created.' }
format.json { render json: @answer.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @answer.update(answer_params)
format.html { redirect_to @answer, notice: 'Answer was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @answer.errors, status: :unprocessable_entity }
end
end
end
def destroy
@answer.destroy
respond_to do |format|
format.html { redirect_to answers_url }
format.json { head :no_content }
end
end
private
def set_answer
@answer = Answer.find(params[:id])
@answer ||= @question.answers.new
end
def answer_params
params.require(:answer).permit(:id, :body)
end
def set_language_and_question
@language = Language.find(params[:language_id])
@question = Question.find(params[:question_id])
end
end
А вот вид «Мои вопросы» (который просто перечислить все вопросы на данный момент) :
<div class="row">
<div class="col-md-8">
<h3>My Unanswered Questions</h3>
<% @questions.each do |question| %>
<div class="media">
<div class="media-body">
<h4 class="media-heading">
<p><%= question.language ? link_to(question.body, [question.language, question]) : question.body %></p>
</h4>
<small>
submitted <%= time_ago_in_words(question.created_at) %> ago by <%= question.user.name %> <br/>
<%= question.answers.count %> Answers
</small>
</div>
</div>
<% end %>
</div>
<br/>
<br/>
<div class="col-md-4">
<%= link_to "Ask a New Question", new_question_path, class: 'btn btn-success' %>
</div>
</div>
<div class="row">
<div class="col-md-8">
<h3>My Answered Questions</h3>
<% @questions.each do |question| %>
<div class="media">
<div class="media-body">
<h4 class="media-heading">
<p><%= question.language ? link_to(question.body, [question.language, question]) : question.body %></p>
</h4>
<small>
submitted <%= time_ago_in_words(question.created_at) %> ago by <%= question.user.name %> <br/>
<%= question.answers.count %> Answers
</small>
</div>
</div>
<% end %>
</div>
</div>
<div class="row">
<div class="col-md-8">
<h3>Questions I Answered</h3>
<% @questions.each do |question| %>
<div class="media">
<div class="media-body">
<h4 class="media-heading">
<p><%= question.language ? link_to(question.body, [question.language, question]) : question.body %></p>
</h4>
<small>
submitted <%= time_ago_in_words(question.created_at) %> ago by <%= question.user.name %> <br/>
<%= question.answers.count %> Answers
</small>
</div>
</div>
<% end %>
</div>
</div>
Я не на 100% понят, что вы имеете в виду по категориям, но достаточно ли добавить 3 области в вашу модель вопроса (по одному для каждого из трех случаев, о которых вы упоминаете), использовать их для заполнения 3 переменные экземпляра в вашем 'QuestionController # index', а затем использовать их в своем шаблоне? – Matt
Они говорят, что группируют их без ответа/ответили/я ответил, 3 категории. Я думаю, что у вас есть 2 типа ответов (ответ/ответ), а второй тип - ответ. Либо это, либо два типа: вопрос/ответ, с вопросом, имеющим ответное логическое значение, с которым вы используете group_by. –