我有一个 Rails 应用程序,可以让用户提出问题并由专业人员回答。除了问答模型,应用程序还通过以下方式跟踪类别
Question.rb
has_many :categorizations
has_many :categories, through: :categorizations
类别.rb
has_many :categorizations
has_many :questions, through: :categorizations
分类.rb
belongs_to :question
belongs_to :category
现在,我可以访问 localhost:3000/categories 并查看包含问题的所有类别的列表。但是,尽管类别很重要,但它并不是很实用,因为由于所问问题的性质,加利福尼亚州的人不太可能回答有关纽约的问题。因此,我也希望按位置过滤问题。我猜设置 URL 的最佳方式是这样的
localhost:3000/state/ny/categories
我知道我可以通过创建嵌套路由来做到这一点(例如,如果我创建了一个位置资源)
resources :states do
resources :categories
end
因此,虽然我最初将位置存储为问题模型上的字段,但我现在创建了一个位置模型(如果“状态”是保留字,我不确定)。我做了
Location.rb
has_many :questions
Question.rb
belongs_to :locations
并且还做了嵌套路由,所以我可以按状态过滤类别
resources :locations do
resources :categories
end
但是,您会注意到我没有在位置和类别之间创建关联,所以如果我去这条路线
http://localhost:3000/locations/ny/categories
如果 index.html.erb 视图页面显示每个类别存在多少问题
<% @categories.each do |category| %>
<div class="category">
<h5><%= link_to category.name, category %></h5>
<%= pluralize category.questions.size, "question" %>
</div>
<% end %>
它没有按位置过滤。例如,无论位置如何,它仍然会计算所有问题。除非我在过滤位置的视图中添加一些逻辑,否则拥有这样的路线没有任何好处。
除了类别,我还尝试了嵌套问题,但这显然也没有改变任何东西。
resources :locations do
resources :questions
end
我想你可以看到我想要做什么。你能建议我应该怎么做吗?
例如,我是否应该在位置和类别之间创建关联,如果是,它将如何与我有分类的那个连接模型一起工作 - 它是否可以属于其他三个模型。或者我应该如何过滤按位置分类的问题或问题。
谢谢,如果你能提供一些指示。