我有问题和类别模型。问题模型有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
问题:如何实现我显示如上所示的问题?
答案 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),还有一个第二个参数,这是链接的路径*