我正试图找到一种方法来拉出分配给课程的所有笔记,但仅在必要时。我有一个显示页面,显示测验的所有注释。
当然是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"}) %>
答案 0 :(得分:2)
您似乎没有course
和quiz
之间的关系。
course
有很多quizzes
,quiz
有很多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
计算块并仅返回其为真的元素。