Ruby on rails 属于其他两个模型的模型最终都具有相同的id
我刚刚完成Hartl RoR教程,正在尝试添加用户加入组的功能。我的代码基于以下用户的代码。我使用的是属于一个组和一个用户的成员模型。我能够通过以下方式创建rspec的会员资格: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
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。