我正在從Rails應用程序中爲用戶提供來自用戶所選類別的隨機問題。如果用戶回答了問題,我希望它永遠不會再提供給用戶。使用連接表來排除出現在隨機查詢中的記錄
問題的答案存儲在記憶表中。記憶表充當用戶和問題之間的連接表。在rails控制檯中,我可以使用question = Question.first隔離所有已回答特定問題的用戶,並且question.users將返回已回答該問題的一組用戶對象。
在rails中,我無法弄清楚如何排除已回答的問題再次呈現。
指導?
作爲一個領導者,我進入rails/ruby開發大約12周。我懷疑這很容易,我只是看不到它。
我QuestionsController - 這部作品提出一個隨機的問題,但如果它已經由先前用戶回答甚至提出:
class QuestionsController < ApplicationController
def index
@category = Category.find(params[:category_id])
@question = Question.where(category_id: @category.id).sample
end
def show
@question = Question.find(params[:id])
end
end
問題型號
class Question < ActiveRecord::Base
validates_presence_of :category_id
has_many :memories,
inverse_of: :question
has_many :users,
through: :memories
belongs_to :category,
inverse_of: :questions
end
用戶型號
class User < ActiveRecord::Base
validates_presence_of :first_name, :last_name, :role
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
def is_admin?
role == 'admin'
end
has_many :memories,
inverse_of: :user,
dependent: :destroy
has_many :questions,
through: :memories
end
內存模型
class Memory < ActiveRecord::Base
validates_presence_of :user, :question
belongs_to :question,
inverse_of: :memories
belongs_to :user,
inverse_of: :memories
validates :question, uniqueness: { :scope => :user }
end
在我的記憶模型驗證防止用戶回答他們已經回答了一個問題 - 所以這是朝着正確方向邁出的一步。我希望這個問題一旦回答就再也不會出現。
這是我第一篇文章。興奮地加入社區,並希望有一天能夠支付。感謝您的任何指導。
我會看看,並與上述反應合併這,看看我可以製造正面或反面,並取得成功。感謝您的迴應! – ryanscottbuchholtz
這工作沒有調整。我已經招致了技術債務,並且會在我今晚睡覺之前強迫自己償還。將研究這一點,並確保我理解它。謝謝。 – ryanscottbuchholtz