has_many 的问题:通过 Ruby on Rails 中的关联
我遇到了 has_many 问题:通过关联,我无法调用 u1.UsersProfileAttributes.find_by_ProfileAttribute_name("icq")
方法,rails 意味着该方法不存在。方法 u1.UsersProfileAttributes.find_by_ProfileAttribute_id(3)
工作正常。 u1 是一个用户对象。我不知道出了什么问题,因为我的联想似乎没问题。看看:
class ProfileAttribute < ActiveRecord::Base
has_many :UsersProfileAttributes
has_many :users, :through => :UsersProfileAttributes
end
class User < ActiveRecord::Base
has_many :UsersProfileAttributes
has_many :ProfileAttributes, :through => :UsersProfileAttributes
end
class UsersProfileAttribute < ActiveRecord::Base
belongs_to :user
belongs_to :ProfileAttribute
end
我的迁移文件:
class CreateProfileAttributes < ActiveRecord::Migration
def self.up
create_table :profile_attributes do |t|
t.string :name
t.integer :profile_group_id
t.timestamps
end
create_table :users_profile_attributes do |t|
t.integer :user_id
t.integer :ProfileAttribute_id
t.string :value
end
end
def self.down
drop_table :profile_attributes
drop_table :users_profile_attributes
end
end
I've got a problem with a has_many :through association, i cant call the u1.UsersProfileAttributes.find_by_ProfileAttribute_name("icq")
method, rails means that this method doesn't exist. The method u1.UsersProfileAttributes.find_by_ProfileAttribute_id(3)
works correctly. u1 is a user object. I don't know whats the problem, because my associations seems to be okay. Have a look:
class ProfileAttribute < ActiveRecord::Base
has_many :UsersProfileAttributes
has_many :users, :through => :UsersProfileAttributes
end
class User < ActiveRecord::Base
has_many :UsersProfileAttributes
has_many :ProfileAttributes, :through => :UsersProfileAttributes
end
class UsersProfileAttribute < ActiveRecord::Base
belongs_to :user
belongs_to :ProfileAttribute
end
My Migration file:
class CreateProfileAttributes < ActiveRecord::Migration
def self.up
create_table :profile_attributes do |t|
t.string :name
t.integer :profile_group_id
t.timestamps
end
create_table :users_profile_attributes do |t|
t.integer :user_id
t.integer :ProfileAttribute_id
t.string :value
end
end
def self.down
drop_table :profile_attributes
drop_table :users_profile_attributes
end
end
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要查询 ProfileAttributes,而不是 UsersProfileAttributes。这应该对您有用:
u1.ProfileAttributes.find_by_name('icq')
u1.UsersProfileAttributes.find_by_ProfileAttribute_id(3)
有效,因为ProfileAttribute_id
是UsersProfileAttribute
的属性...因此 ActiveRecord 为您构建了一个动态查找器。u1.UsersProfileAttributes.find_by_ProfileAttribute_name("icq")
不起作用,因为ProfileAttribute_name
不是UsersProfileAttribute
的属性。You need to query ProfileAttributes, not UsersProfileAttributes. This should work for you:
u1.ProfileAttributes.find_by_name('icq')
u1.UsersProfileAttributes.find_by_ProfileAttribute_id(3)
works becauseProfileAttribute_id
is an attribute ofUsersProfileAttribute
... so ActiveRecord builds you a dynamic finder.u1.UsersProfileAttributes.find_by_ProfileAttribute_name("icq")
does not work becauseProfileAttribute_name
is not an attribute ofUsersProfileAttribute
.