你能告诉我创建has_one关系的最佳做法吗?
如果我有一个用户模型,它必须有一个配置文件...
我怎么能做到这一点?
一个解决方案是:
# user.rb
class User << ActiveRecord::Base
after_create :set_default_association
def set_default_association
self.create_profile
end
end
Run Code Online (Sandbox Code Playgroud)
但这似乎不是很干净......有什么建议吗?
ruby activerecord ruby-on-rails associations ruby-on-rails-3
Rails有一个has_one :through
关联,通过第二个模型帮助建立与第三个模型的一对一关联.除了建立一个快捷方式关联之外,它的实际用途是什么,否则这将是一个额外的步骤.
以Rails 指南为例:
class Supplier < ActiveRecord::Base
has_one :account
has_one :account_history, :through => :account
end
class Account < ActiveRecord::Base
belongs_to :supplier
has_one :account_history
end
class AccountHistory < ActiveRecord::Base
belongs_to :account
end
Run Code Online (Sandbox Code Playgroud)
可能允许我们做类似的事情:
supplier.account_history
Run Code Online (Sandbox Code Playgroud)
否则将达到:
supplier.account.history
Run Code Online (Sandbox Code Playgroud)
如果它只是为了更简单的访问,那么从技术上讲,可能存在一对一的关联,它将模型与通过n-1模型的某个第n个模型连接起来,以便于访问.除了快捷方式之外,还有什么我想念的吗?
是否有可能has_many :through
在Rails中有多个相互关系的关系?我收到了这样的建议,作为我发布的另一个问题的解决方案,但一直无法让它工作.
好友是通过联接表的循环关联.我的目标是创建一个has_many :through
for friends_comments
,所以我可以采取行动,User
并user.friends_comments
在一个查询中获取他的朋友发表的所有评论.
class User
has_many :friendships
has_many :friends,
:through => :friendships,
:conditions => "status = #{Friendship::FULL}"
has_many :comments
has_many :friends_comments, :through => :friends, :source => :comments
end
class Friendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, :class_name => "User", :foreign_key => "friend_id"
end
Run Code Online (Sandbox Code Playgroud)
这看起来很棒,而且很有意义,但不适合我.当我尝试访问用户的friends_comments时,这是我在相关部分中遇到的错误:
ERROR: column users.user_id does not exist
: SELECT "comments".* FROM "comments" INNER JOIN "users" ON "comments".user_id = "users".id WHERE (("users".user_id = …
我有2个型号.Report
并且Server
有一个belongs_to和has_many关系.我创建了一个使用的访问器方法delegate
,允许Report
找到它的关联Server.company_id
.现在,我想运行一个查询Report
,允许我查找Report
与Server
具有特定company_id
属性5 的特定属性相关联的所有内容.
这是我的两个型号.是的,我知道当前的查询不起作用,因为Report
没有属性company_id
.
不,我不想存储company_id
内部,Report
因为该信息不属于Report
.
报告
class Report < ActiveRecord::Base
belongs_to :server
delegate :company_id, :to => :server
class << self
def method(url, base_url)
#Report.where(company_id: 5)
end
end
end
Run Code Online (Sandbox Code Playgroud)
服务器
class Server < ActiveRecord::Base
attr_accessible :company_id
has_many :reports
end
Run Code Online (Sandbox Code Playgroud) 我有很多实例需要在我的数据库中实现某种多态关联.我总是浪费大量的时间来思考所有的选择.这是我能想到的3.我希望有一个SQL Server的最佳实践.
这是多列方法
这是没有外键的方法
这是基表方法
sql-server associations polymorphic-associations database-normalization
我在我的项目中使用ActiveAdmin gem.
我有2个模型使用has_many通过关联.数据库模式看起来与RailsGuide中的示例完全相同.http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association has_many通过关联http://guides.rubyonrails.org/images/has_many_through.png
如何使用ActiveAdmin ...
谢谢大家.:)
rubygems ruby-on-rails associations ruby-on-rails-3 activeadmin
我在工作和公司之间有一对多的关联,并且工作正常.在作业表单视图中,我有一个带有自动完成功能的公司名称的text_field.自动完成工作正常,但如果我在自动完成列表中放置了一个公司名称,则find_or_create_by不会创建新公司.
def company_name
company.try(:name)
end
def company_name=(name)
@company = Company.find_or_create_by(name: name)
end
Run Code Online (Sandbox Code Playgroud) 我想知道如何为模型添加关联.假设,我生成了两个模型
rails generate model User
rails generate model Car
Run Code Online (Sandbox Code Playgroud)
现在我想添加一个关联,以便模型获取表单
class User < ActiveRecord::Base
has_many :cars
end
class Car < ActiveRecord::Base
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
问题是:如何通过迁移应用此修改以获取数据库中的cars_users表?我打算在我的代码中使用该表.
我自己有一个关于Sails.js版本0.10-rc5中的关联的问题.我一直在构建一个应用程序,其中多个模型相互关联,我已到达我需要以某种方式嵌套关联的点.
有三个部分:
首先是博客文章,这是由用户编写的.在博客文章中,我想显示关联用户的信息,如用户名.现在,这里一切正常.直到下一步:我正在尝试显示与帖子相关的评论.
注释是一个单独的模型,称为Comment.每个人还有一个与之相关的作者(用户).我可以轻松地显示评论列表,但是当我想显示与评论相关的用户信息时,我无法弄清楚如何使用用户的信息填充评论.
在我的控制器中,我试图做这样的事情:
Post
.findOne(req.param('id'))
.populate('user')
.populate('comments') // I want to populate this comment with .populate('user') or something
.exec(function(err, post) {
// Handle errors & render view etc.
});
Run Code Online (Sandbox Code Playgroud)
在我的Post''show'动作中,我试图检索这样的信息(简化):
<ul>
<%- _.each(post.comments, function(comment) { %>
<li>
<%= comment.user.name %>
<%= comment.description %>
</li>
<% }); %>
</ul>
Run Code Online (Sandbox Code Playgroud)
但是,comment.user.name将是未定义的.如果我尝试访问'user'属性,例如comment.user,它将显示它的ID.这告诉我,当我将评论与其他模型关联时,它不会自动将用户的信息填充到评论中.
任何理想的人都能妥善解决这个问题:)?
提前致谢!
PS
为了澄清,这就是我基本上在不同模型中建立关联的方式:
// User.js
posts: {
collection: 'post'
},
hours: {
collection: 'hour'
},
comments: {
collection: 'comment'
}
// Post.js
user: {
model: 'user'
},
comments: …
Run Code Online (Sandbox Code Playgroud) 我在这里,关于聚合和关联的另一个问题.我想学习一些UML的基础知识,所以我开始阅读Martin Fowler撰写的"UML精简版".我阅读了关于课程的两章,有一件事我想不到,那就是聚合与关联.在这本书中有这样的引用:
在UML之前的日子里,人们通常对聚合和关联是相当模糊的.无论是否含糊,它们总是与其他人不一致.因此,尽管出于不同的原因,许多建模者认为聚合很重要.因此UML包含聚合(图5.3),但几乎没有任何语义.正如Jim Rumbaugh所说,"把它想象成一个建模安慰剂" [Rumbaugh,UML Reference].
正如我从Stack Overflow上的这个引用和主题中所理解的那样,我使用这两个关系中的哪一个并不重要,它们的意思相同,或者是否有任何使用聚合而不是关联的情况是合理的和/或我不能改变一个到另一个而不改变类图的"含义"?
我问这个,因为这本书是从2003年开始的,有些事情可能会在这几年内发生变化.
associations ×10
activerecord ×2
ruby ×2
activeadmin ×1
aggregation ×1
migration ×1
nested ×1
node.js ×1
populate ×1
rails-models ×1
rubygems ×1
sails.js ×1
sql-server ×1
uml ×1