Rails - 按类别显示所有问题

时间:2016-04-25 14:38:26

标签: ruby-on-rails ruby

我有问题和类别模型。问题模型有category_id列。

class Question
  belongs_to :category
end
class Category
  has_many :questions
end

在我的控制器中我有这个:

def index
   @categories = Category.all
   @questions = Question.all
end

我想显示属于指定类别的所有类别和所有问题。此外,我想在每个类别下面显示问题编号并建立它们的链接,稍后它将打开包含点击问题的新页面。

这就是我尝试这样做的方式:

<% @categories.each do |category| %>
    <h1><%= category.name %></h1>
    <% @questions.each do |question| %>
         <ul>
             <li><%= link_to question.id %></li>
         </ul>
    <% end %>
<% end %>

这看起来应该是这样,但我卡住了:

  

组别
  1 2 3 4

     

类别2
  1 2 3 4

问题:如何实现我显示如上所示的问题?

2 个答案:

答案 0 :(得分:3)

你可以这样做:

控制器:

def index
   @categories = Category.all
end

查看:

<% @categories.each do |category| %>
    <h1><%= category.name %></h1>
    <% category.questions.each do |question| %>
         <ul>
             <li><%= link_to question.id, question_path %></li>
         </ul>
    <% end %>
<% end %>

答案 1 :(得分:2)

由于您说要显示所有类别以及属于每个类别的问题,因此我假设您粘贴的索引操作来自您的categories_controller。

我能想到的一个解决方案是更改索引中的实例变量。我真的没有看到实例变量引用所有Question对象的目的。这是我正在谈论的那个:

@questions = Question.all

是的,摆脱它。只需

即可
@categories = Category.all

由于您要显示所有类别,因此该实例变量是必需的。并且由于您提到您还想显示属于每个类别的所有问题,因此该实例变量足以使用正确的视图。你是在正确的轨道上,而只是使用@categories实例变量;忘了@questions。以下是您的视图应该是什么样的(您在上面的正确轨道上):

<% @categories.each do |category| %>
   <h1><%= category.name %></h1>
      <% category.questions.each do |question| %>
      <ul>
         <li><%= link_to question.id, question_path %></li>
      </ul>
      <% end %>
<% end %>

另请注意,在第一行代码中,当您启动一个块时,您不需要&lt;%=,您只需要&lt;%。这是因为该块的第一行本身就是纯粹的红宝石,它实际上并没有被打印到生成的html中。 希望我帮了一下!

*另外:我在这里看到了另一个错误的答案:当你使用&lt;%= link_to%&gt; helper,你需要指定第一个参数,它是结果标记(在这种情况下你想要question.id),还有一个第二个参数,这是链接的路径*