ユーザーが自分のプロフィールにコースを追加できるアプリがあります。これは、私の「ラインナップ」モデルを通じて行われます。私のデータベースとスキーマのアイデアを提供するには:
#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 %>
私はここで本当に機知に富んでおり、この条件が機能しない理由を理解できません。あらゆるご意見をお待ちしております。