この関係は、ユーザーがドキュメントを作成して他のユーザーをそのドキュメントに属するグループに招待できる場合に発生します。私の関係は、「グループ」にuser_idとtrip_idの列があることを示しています。したがって、招待するすべてのユーザーに対して、新しいグループレコードがデータベースに作成されます。ユーザーがすでに「グループ」関係に属している場合、反復中にユーザーが表示されない
他のユーザーを招待しているときは、グループに属していないユーザーのみが表示されます。すでにグループに入っているユーザーは表示されませんが、私のビューにはユーザーが表示されます。
私は<% if !friend.trips.include?(@trip)%>
で遊んでいましたが、正しい表示が得られないようです。レコードがデータベースに正しく作成されています。
また、私がgroups/new.html.erbを表示しているとき、これはURLがhttp://localhost:3000/groups/new?id=2
で、idはtrip_idです。
私の質問:私は安らかな規則を使用して
- アム?つまり、ここで新しいメソッドを使用するか(そうでなければ)、代わりにインデックスメソッドを使用する必要がありますか?
- どのようにグループのtrip_idに@ trip.idに相当するものがないことを確認するために、各友人のグループを反復処理しますか?
ありがとう!
ビュー(/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
私は '<%if!friend.trips.include?(@ trip)%>'を使ってみましたが、動作しませんでした。すべてのユーザーはまだ表示されていました。あなたの他のソリューション '<%if!friend.groups.where(:trip_id => @ trip.id).first%>'が成功しました。 。まずは何をするのですか? – Huy
私のルートのために最初のものが動作しなかったと思いますか? – Huy
'.first'は最初のものをデータベースから取り出します。実際にクエリを実行し、オブジェクトを処理していることを確認します。もしあなたがそれをしなかったなら、あなたはいつも「真」とみなされるArelオブジェクトをすべてのケースで扱うでしょう。 – tsherif