Ich habe diese Beziehung, in der Benutzer ein Dokument (Reise) erstellen und andere Benutzer zu einer Gruppe einladen kann, die zu diesem Dokument gehört. Meine Beziehung zeigt an, dass "Gruppe" eine Spalte user_id und trip_id aufweist. Daher wird für jeden Benutzer, den ich einlade, ein neuer Gruppendatensatz in der Datenbank erstellt.Benutzer während Iteration nicht anzeigen, wenn Benutzer bereits zur "Gruppen" -Beziehung gehört
Wenn ich andere Benutzer einlade, möchte ich nur Benutzer anzeigen, die NICHT in der Gruppe sind. Benutzer, die bereits in der Gruppe sind, sollten nicht angezeigt werden, aber meine Ansicht zeigt immer noch die Benutzer an.
Ich habe mit <% if !friend.trips.include?(@trip)%>
herum gespielt, aber ich kann nicht scheinen, die richtige Ansicht zu bekommen. Der Datensatz wird korrekt in der Datenbank erstellt.
Auch, wenn ich Gruppen/new.html.erb anzeigen, ist dies die URL http://localhost:3000/groups/new?id=2
, wo die ID ist die trip_id.
Meine Frage:
- Bin ich ruhig Konvention? Das heißt, sollte ich die neue Methode hier verwenden (wie es ist) oder sollte ich stattdessen die Indexmethode verwenden?
- Wie wiederhole ich die Gruppen der einzelnen Freunde, um sicherzustellen, dass keine trip_id der Gruppe äquivalent zu @ trip.id ist?
Vielen Dank!
Ansicht (/groups/new.html.erb)
<% if [email protected]? %>
<% @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
Ich versuchte mit '<% if! Friend.trips.include? (@ Trip)%>' aber es hat nicht funktioniert. Alle Benutzer wurden weiterhin angezeigt. Ihre andere Lösung '<% if! Friend.groups.where (: trip_id => @ trip.id) .first%>' hat funktioniert. Was macht zuerst? – Huy
Glaubst du, dass der erste wegen meiner Routen nicht funktioniert hat? – Huy
'.first' zieht nur den ersten aus der Datenbank. Es stellt sicher, dass Sie die Abfrage tatsächlich ausgeführt haben und sich mit dem Objekt befassen. Wenn Sie es nicht tun würden, würden Sie in allen Fällen mit einem Arel-Objekt zu tun haben, das immer als "wahr" betrachtet wird. – tsherif