比较陈述失败

时间:2012-08-06 08:50:23

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

我有一个允许用户在其个人资料中添加课程的应用。这是通过我的'阵容'模型完成的。为了让您了解我的数据库和架构:

#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 %>

我真的在我的智慧结束,无法弄清楚为什么这个条件不起作用。任何和所有输入将不胜感激。

1 个答案:

答案 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