从迭代轨道获取特定项目3

时间:2012-05-30 18:05:37

标签: ruby-on-rails ruby ruby-on-rails-3

我正试图找到一种方法来拉出分配给课程的所有笔记,但仅在必要时。我有一个显示页面,显示测验的所有注释。

当然是show.html.erb

<%= @course.name %>
<% @quiz.notes.each do |note| %>
    <%= link_to note.title, quiz_note_path(@quiz, note)  %><br/>
<% end %>

以上代码可以找到,除非它提取所有笔记而不是分配给该课程的笔记。如果笔记和课程名称相同,我怎么能告诉rails只拉笔记?

更新<!/强>

在注释new.html.erb中我使用了collection_select

  <%= f.collection_select(:course_ids, @quiz.courses, :id, :note_name, options = {:prompt => "Choose"}) %>

2 个答案:

答案 0 :(得分:2)

您似乎没有coursequiz之间的关系。

course有很多quizzesquiz有很多notes。您应该以这种方式设置您的关系,这样就不会删除与当前course无关的不必要的注释。

这里的诀窍是使用has_many :through拉出课程中的所有笔记。

class Course < ActiveRecord::Base
  has_many :quizzes
  has_many :notes, :through => quizzes
end

class Quiz < ActiveRecord::Base
  has_many :notes
end

class Note < ActiveRecord::Base
  belongs_to :quiz
end

<%= @course.name %>
<% @course.notes.each do |note| %>
    <%= link_to note.title, quiz_note_path(note.quiz, note)  %><br/>
<% end %>

答案 1 :(得分:0)

尝试这样的事情。

<%= @course.name %>
<% @quiz.notes.select { |n| n.title == @course.name }.each do |note| %>
  <%= link_to note.title, quiz_note_path(@quiz, note)  %><br/>
<% end %>

Enumerable.select计算块并仅返回其为真的元素。