私には、ユーザーがドキュメント(トリップ)を作成し、そのドキュメントに属するグループに他のユーザーを招待できるという関係があります。私の関係は、「グループ」にuser_id列とtrip_id列があることを示しているため、招待するすべてのユーザーに対して、新しいグループレコードがデータベースに作成されます。
他のユーザーを招待するときは、グループに属していないユーザーのみを表示したいと思います。すでにグループに参加しているユーザーは表示されないはずですが、私のビューには引き続きユーザーが表示されます。
私は遊んでい<% if !friend.trips.include?(@trip)%>
ますが、正しいビューを取得できないようです。レコードはデータベースに正しく作成されています。
また、groups / new.html.erbを表示している場合、これはurlhttp://localhost:3000/groups/new?id=2
であり、idはtrip_idです。
私の質問:
- 私は安らかな慣習を使用していますか?つまり、ここで(そのままで)新しいメソッドを使用する必要がありますか、それとも代わりにインデックスメソッドを使用する必要がありますか?
- 各友人のグループを反復処理して、グループのtrip_idが@ trip.idと同等でないことを確認するにはどうすればよいですか?
ありがとう!
ビュー(/groups/new.html.erb)
<% if !@friends.blank? %>
<% @friends.each do |friend| %>
<% if !friend.trips.include?(@trip)%>
<%= link_to groups_path(:user_id => friend.id, :trip_id => @trip.id),
:method => :post, :action => 'create' do %>
<div id="addfriend_totrip_button_groupsnew">add friend to trip</div>
<% end %>
<% end %>
<% end %>
<% end %>
groups_controller.rb
class GroupsController < ApplicationController
before_filter :authenticate, :only => [:update, :create, :destroy]
def new
@trip = Trip.find(params[:id])
@user = User.find(current_user)
@group = Group.new
@friends = @user.friends.all
end
def create
@trip = Trip.find(params[:trip_id])
@user = User.find(params[:user_id])
@group = Group.create(:user_id => @user.id, :trip_id => @trip.id)
if @group.save
flash[:success] = "Friend added to group."
redirect_to groups_path(:id => @trip.id)
else
flash[:error] = "Could not add friend."
redirect_to root_path
end
end
end
user.rb
class User < ActiveRecord::Base
has_many :trips, :through => :groups
has_many :trips, :dependent => :destroy
has_many :groups
end
trip.rb
class Trip < ActiveRecord::Base
belongs_to :user
belongs_to :traveldeal
has_many :groups
has_many :users, :through => :groups
end
group.rb
class Group < ActiveRecord::Base
belongs_to :trip
belongs_to :user
end