Ruby on rails 属于其他两个模型的模型最终都具有相同的id

Ruby on rails 属于其他两个模型的模型最终都具有相同的id,ruby-on-rails,Ruby On Rails,我刚刚完成Hartl RoR教程,正在尝试添加用户加入组的功能。我的代码基于以下用户的代码。我使用的是属于一个组和一个用户的成员模型。我能够通过以下方式创建rspec的会员资格: let(:group) { FactoryGirl.create(:group)} let(:member) { FactoryGirl.create(:user) } let(:membership) {group.memberships.build(member_id: member.id, group_id: g

我刚刚完成Hartl RoR教程,正在尝试添加用户加入组的功能。我的代码基于以下用户的代码。我使用的是属于一个组和一个用户的成员模型。我能够通过以下方式创建rspec的会员资格:

let(:group) { FactoryGirl.create(:group)}
let(:member) { FactoryGirl.create(:user) }
let(:membership) {group.memberships.build(member_id: member.id, group_id: group.id) }
但是,每当我试图在实际的生产代码中创建成员身份时,group.id总是等于当前用户的用户id。例如,如果我尝试以用户105的身份加入组1,我将在运行服务器的终端中获得以下输出

Started POST "/memberships" for 127.0.0.1 at 2013-11-08 21:07:56 -0600
Processing by MembershipsController#create as JS
  Parameters: {"utf8"=>"✓", "membership"=>{"group_id"=>"1"}, "commit"=>"Join"}
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."remember_token" = '342a18004399db9cb75e1a7239dc634b2006e7d6' LIMIT 1
{"utf8"=>"✓", "membership"=>{"group_id"=>"1"}, "commit"=>"Join", "action"=>"create", "controller"=>"memberships"}
  Group Load (0.2ms)  SELECT "groups".* FROM "groups" WHERE "groups"."id" = ? LIMIT 1  
[["id", "1"]]
   (0.1ms)  begin transaction
  SQL (0.7ms)  INSERT INTO "memberships" ("created_at", "group_id", "member_id", "updated_at") VALUES (?, ?, ?, ?)  [["created_at", Sat, 09 Nov 2013 03:07:56 UTC +00:00, ["group_id", 105], ["member_id", 105], ["updated_at", Sat, 09 Nov 2013 03:07:56 UTC+00:00]]
   (2.4ms)  commit transaction
  Rendered groups/_join.html.erb (2.9ms)
  Rendered memberships/create.js.erb (10.3ms)
  Completed 200 OK in 32ms (Views: 19.9ms | ActiveRecord: 3.7ms)
用于加入组的按钮的HTML.erb部分:

<%= form_for(@group.memberships.build(member_id: current_user.id, group_id: @group.id), remote: true) do |f| %>
  <div><%= f.hidden_field :group_id %></div>
  <%= f.submit "Join", class: "btn btn-large btn-primary" %>
<% end %>
成员资格控制器创建操作是:

  def create
    puts params
    @group = Group.find(params[:membership][:group_id])
    #Membership.new(member_id: current_user.id, group_id: @group.id)
    current_user.join!(@group)
  end
会员模式为:

class Membership < ActiveRecord::Base
  belongs_to :member, class_name: "User"
  belongs_to :group, class_name: "Group"
  validates :member_id, presence: true
  validates :group_id, presence: true
end
class User < ActiveRecord::Base
  validates :name, presence: true, length: {maximum: 50}
  VALID_EMAIL_REGEX =  /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
                 uniqueness: {case_sensitive: false }
  before_save {email.downcase!}
  before_create :create_remember_token
  has_secure_password
  validates :password, length: { minimum: 6 }
  has_many :microposts, dependent: :destroy
  has_many :relationships, foreign_key: "follower_id", dependent: :destroy
  has_many :followed_users, through: :relationships, source: :followed
  has_many :reverse_relationships, foreign_key: "followed_id",
                               class_name:  "Relationship",
                               dependent:   :destroy
  has_many :followers, through: :reverse_relationships, source: :follower
  has_many :memberships, foreign_key: "group_id"
  has_many :joined_groups, through: :memberships, source: :group

 def following?(other_user)
   relationships.find_by(followed_id: other_user.id)
 end

 def follow!(other_user)
   relationships.create!(followed_id: other_user.id)
 end

 def unfollow!(other_user)
   relationships.find_by(followed_id: other_user.id).destroy!
 end

 def join!(group)
   memberships.create!(group_id: group.id, member_id: self.id)
 end

 def member?(group)
   memberships.find_by(group_id: group.id)
 end

 def leave_group!(group)
   memberships.find_by(group_id: group.id).destroy
 end

 def User.new_remember_token
   SecureRandom.urlsafe_base64
 end

 def feed
   Micropost.from_users_followed_by(self)
 end

 def User.encrypt(token)
   Digest::SHA1.hexdigest(token.to_s)
 end

 private

   def create_remember_token
     self.remember_token = User.encrypt(User.new_remember_token)
   end
end
用户模型为:

class Membership < ActiveRecord::Base
  belongs_to :member, class_name: "User"
  belongs_to :group, class_name: "Group"
  validates :member_id, presence: true
  validates :group_id, presence: true
end
class User < ActiveRecord::Base
  validates :name, presence: true, length: {maximum: 50}
  VALID_EMAIL_REGEX =  /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
                 uniqueness: {case_sensitive: false }
  before_save {email.downcase!}
  before_create :create_remember_token
  has_secure_password
  validates :password, length: { minimum: 6 }
  has_many :microposts, dependent: :destroy
  has_many :relationships, foreign_key: "follower_id", dependent: :destroy
  has_many :followed_users, through: :relationships, source: :followed
  has_many :reverse_relationships, foreign_key: "followed_id",
                               class_name:  "Relationship",
                               dependent:   :destroy
  has_many :followers, through: :reverse_relationships, source: :follower
  has_many :memberships, foreign_key: "group_id"
  has_many :joined_groups, through: :memberships, source: :group

 def following?(other_user)
   relationships.find_by(followed_id: other_user.id)
 end

 def follow!(other_user)
   relationships.create!(followed_id: other_user.id)
 end

 def unfollow!(other_user)
   relationships.find_by(followed_id: other_user.id).destroy!
 end

 def join!(group)
   memberships.create!(group_id: group.id, member_id: self.id)
 end

 def member?(group)
   memberships.find_by(group_id: group.id)
 end

 def leave_group!(group)
   memberships.find_by(group_id: group.id).destroy
 end

 def User.new_remember_token
   SecureRandom.urlsafe_base64
 end

 def feed
   Micropost.from_users_followed_by(self)
 end

 def User.encrypt(token)
   Digest::SHA1.hexdigest(token.to_s)
 end

 private

   def create_remember_token
     self.remember_token = User.encrypt(User.new_remember_token)
   end
end
class用户

最后,我以用户1的身份加入了组1,该组现在显示用户1的gravatar,但不显示我试图加入组1的其他用户的gravatar

你也可以给我们展示一下用户模型,包括加入!方法?此外,如果您将“@group=group.find…”行“放入”成员控制器的“创建”操作中,则会显示什么?该操作将提供组负载(0.3ms)从“组”中选择“组”。*其中“组”。“id”=?限制1[[“id”,“1”].#如果不能在本地运行代码,调试起来有点困难。你有这个应用的公共Github存储库吗?我们可以克隆它?我刚刚将这个分支添加到Github。