我有一个允许用户在其个人资料中添加课程的应用。这是通过我的'阵容'模型完成的。为了让您了解我的数据库和架构:
#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
我知道这条线有效,但是我知道它在视图中工作:
for current_user.lineups中的阵容
我知道当迭代上面的行时,会创建'lineup'实例并且关系工作找不到(即'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 %>
我真的在我的智慧结束,无法弄清楚为什么这个条件不起作用。任何和所有输入将不胜感激。
答案 0 :(得分:1)
您正在比较此行中的数字(course.id)和字符串(参数[:id])
if lineup.course.id == course_id
这在Ruby中不起作用:)
尝试更改为
if lineup.course.id.to_s == course_id
或
if lineup.course.id == course_id.to_i