我有一个应用程序,允许用户将课程添加到他们的个人资料中。这是通过我的“阵容”模型完成的。为了让您了解我的数据库和架构:
#relationships
Class User
has_many :lineups
end
Class Course
has_many :lineups
end
Class Lineup
belongs_to :user
belongs_to :course
end
#some schema
create_table "lineups", :force => true do |t|
t.integer "course_id"
t.integer "user_id"
end
现在,我有一个页面,其中列出了带有“添加课程”按钮的课程。单击时,表单将提交给我的“阵容”控制器以执行“创建”操作。这个过程很好用,但是,我检查用户是否已经添加课程的代码失败了。课程将再次添加。这是我的控制器代码:
class LineupsController < ApplicationController
def create
course_id = params[:course_id]
user_id = current_user.id
course_object = Course.find(course_id)
#THIS BLOCK DOES NOT WORK
for lineup in current_user.lineups do
if lineup.course.id == course_id
return redirect_to course_query_url, :alert => "You have already added this course: #{course_object.cl} #{course_object.cn}"
end
end
#THE BLOCK ^^^ DOES NOT WORK
new_lineup = Lineup.new( course_id: course_id, user_id: user_id)
respond_to do |format|
if new_lineup.save
format.html { redirect_to course_query_url, :notice => "Course added: #{course_object.cl} #{course_object.cn}" }
else
format.html { redirect_to course_query_url, :alert => "There was an error in adding the course: #{course_object.cl} #{course_object.cn}" }
end
end
end
end
我知道这条线有效,b / c我让它在一个视图中工作:
对于 current_user.lineups 中的阵容做
而且我知道,当上述行被迭代时,“阵容”实例被创建并且关系工作找到(即“lineup.course.id”)b/c,它也在视图中使用。以下是此循环工作的视图中的代码:
<% if current_user.lineups %>
<% for lineup in current_user.lineups do %>
<li><%= link_to "#{lineup.course.id} #{lineup.course.cn}", index_path %></li>
<% end %>
<% end %>
我真的束手无策,无法弄清楚为什么这个条件不起作用。任何和所有输入将不胜感激。