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 のラインナップの場合

そして、上記の行が繰り返されると、「ラインナップ」インスタンスが作成され、関係が機能することを知っています find (つまり、「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 に答える