没有方法错误
No method error
我正在 rails 4 中开展一个项目,其中一个用户可以拥有多个项目,并且许多人都与一个项目相关联。 IE。项目和用户共享多对多关系。
我使用此迁移代码创建了一个新的 table -
class CreateProjectsUsersJoin < ActiveRecord::Migration
def change
create_table :projects_users_joins, :id => false do |t|
t.integer :user_id
t.integer :project_id
end
add_index :projects_users_joins, ["user_id","project_id"]
end
end
并通过以下方式添加关联 -
class Project < ActiveRecord::Base
validates :name , :presence => true
validates :description, :presence => true
#associations
has_and_belongs_to_many :users
end
class User < ActiveRecord::Base
include CarrierWave::MiniMagick
#removes the white spaces before validating the data
before_validation :strip_whitespace, :only => [:name,:email]
#data validations
validates :email, :presence =>true, :uniqueness => {case_sensitive: false}, :format => { :with=> /([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/, :message => "please enter a valid e-mail" }
validates :name, :presence=>true
validates :password ,:presence =>true, :confirmation=> true #, :length =>{ :minimum=>6, :maximum=>30}, :format=>{:with=>/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,30}/}
#for the image
mount_uploader :image, ImageUploader
#for the password
has_secure_password
#associations
has_many :issues
has_many :comments
has_and_belongs_to_many :projects
end
#squishes the data(removes heading and trailing white spaces and replaces multiple space by songle)
def strip_whitespace
self.email = self.email.squish
self.name = self.name.squish
end
当我 运行 在 rails 控制台上执行以下命令时,出现无方法错误 -
请帮助
pro = Project.find(1) (works)
me = User.find(27) (works)
pro.users << me (throws a no method defined error)
请帮忙
您输入的 table 名字有误。 As the docs say 默认连接 table 名称应该只是两个 类 的复数名称按词汇顺序用下划线连接。所以在这种情况下 projects_users
。
如果您想要 projects_users_joins
,那么您可以在两个 habtm
调用中提供 :join_table
选项,或者(我的建议)对该迁移进行 rake db:migrate:down
,然后删除 "_joins"
并再次迁移以创建默认的 table 名称。
我正在 rails 4 中开展一个项目,其中一个用户可以拥有多个项目,并且许多人都与一个项目相关联。 IE。项目和用户共享多对多关系。
我使用此迁移代码创建了一个新的 table -
class CreateProjectsUsersJoin < ActiveRecord::Migration
def change
create_table :projects_users_joins, :id => false do |t|
t.integer :user_id
t.integer :project_id
end
add_index :projects_users_joins, ["user_id","project_id"]
end
end
并通过以下方式添加关联 -
class Project < ActiveRecord::Base
validates :name , :presence => true
validates :description, :presence => true
#associations
has_and_belongs_to_many :users
end
class User < ActiveRecord::Base
include CarrierWave::MiniMagick
#removes the white spaces before validating the data
before_validation :strip_whitespace, :only => [:name,:email]
#data validations
validates :email, :presence =>true, :uniqueness => {case_sensitive: false}, :format => { :with=> /([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)/, :message => "please enter a valid e-mail" }
validates :name, :presence=>true
validates :password ,:presence =>true, :confirmation=> true #, :length =>{ :minimum=>6, :maximum=>30}, :format=>{:with=>/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,30}/}
#for the image
mount_uploader :image, ImageUploader
#for the password
has_secure_password
#associations
has_many :issues
has_many :comments
has_and_belongs_to_many :projects
end
#squishes the data(removes heading and trailing white spaces and replaces multiple space by songle)
def strip_whitespace
self.email = self.email.squish
self.name = self.name.squish
end
当我 运行 在 rails 控制台上执行以下命令时,出现无方法错误 - 请帮助
pro = Project.find(1) (works)
me = User.find(27) (works)
pro.users << me (throws a no method defined error)
请帮忙
您输入的 table 名字有误。 As the docs say 默认连接 table 名称应该只是两个 类 的复数名称按词汇顺序用下划线连接。所以在这种情况下 projects_users
。
如果您想要 projects_users_joins
,那么您可以在两个 habtm
调用中提供 :join_table
选项,或者(我的建议)对该迁移进行 rake db:migrate:down
,然后删除 "_joins"
并再次迁移以创建默认的 table 名称。