0

我有一个应用程序,允许用户将课程添加到他们的个人资料中。这是通过我的“阵容”模型完成的。为了让您了解我的数据库和架构:

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

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

4

1 回答 1

1

您正在此行中比较数字 (course.id) 和字符串 (params[:id])

if lineup.course.id == course_id

这在 Ruby 中不起作用:)

尝试更改为

if lineup.course.id.to_s == course_id

或者

if lineup.course.id == course_id.to_i
于 2012-08-06T08:57:49.560 回答