我有这种关系,用户可以创建文档(旅行)并邀请其他用户访问属于该文档的组。我的关系表明“Group”有一个user_id和trip_id列,因此对于我邀请的每个用户,都会在数据库中创建一个新的Group记录。
当我邀请其他用户时,我只希望显示不在该组中的用户。已经在该组中的用户不应该出现,但我的视图仍然显示用户。
我一直在玩<% if !friend.trips.include?(@trip)%>
,但我似乎无法得到正确的观点。正在数据库中正确创建记录。
此外,当我查看groups / new.html.erb时,这是网址http://localhost:3000/groups/new?id=2
,其中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
答案 0 :(得分:1)
首先,您在has_many :trips
模型中调用了两次User
。我们了解到,您有两种不同类型的User
- Trip
关系(一种直接,一种通过Group
),但您不能同时使用相同的名称,否则会隐藏其他。尝试像这样定义User
模型:
class User < ActiveRecord::Base
has_many :group_trips, :through => :groups,
:class_name => "Trip"
has_many :trips, :dependent => :destroy
has_many :groups
def all_trips
Trip.joins(:groups).where({:user_id => self.id} | {:groups => {:user_id => self.id}})
end
end
还有一个问题是,您正在friend
的{{1}} groups
列表中搜索Trip
个对象。尝试将该行更改为:
<% if !friend.all_trips.include?(@trip) %>
或者没有新方法,这样的事情应该有效:
<% if !friend.groups.where(:trip_id => @trip.id).first %>
我没有看到任何关于你的方法的非RESTful。 RESTful通常意味着无国籍。即响应唯一依赖的是HTTP方法和地址。因此,只要您不将状态信息保存在会话中,就应该遵循REST。