标签: associations

Rails - 最佳实践:如何创建依赖的has_one关系

你能告诉我创建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

74
推荐指数
5
解决办法
4万
查看次数

Rails has_one:通过关联

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个模型连接起来,以便于访问.除了快捷方式之外,还有什么我想念的吗?

ruby-on-rails associations rails-models rails-activerecord

67
推荐指数
3
解决办法
5万
查看次数

Ruby-on-Rails:多个has_many:通过可能吗?

是否有可能has_many :through在Rails中有多个相互关系的关系?我收到了这样的建议,作为我发布的另一个问题的解决方案,但一直无法让它工作.

好友是通过联接表的循环关联.我的目标是创建一个has_many :throughfor friends_comments,所以我可以采取行动,Useruser.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 = …

ruby-on-rails associations has-many-through

54
推荐指数
3
解决办法
3万
查看次数

Rails:基于关联值的ActiveRecord查询

我有2个型号.Report并且Server有一个belongs_to和has_many关系.我创建了一个使用的访问器方法delegate,允许Report找到它的关联Server.company_id.现在,我想运行一个查询Report,允许我查找ReportServer具有特定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)

ruby activerecord ruby-on-rails associations

54
推荐指数
3
解决办法
4万
查看次数

在SQL Server中实现Polymorphic Association的最佳方法是什么?

我有很多实例需要在我的数据库中实现某种多态关联.我总是浪费大量的时间来思考所有的选择.这是我能想到的3.我希望有一个SQL Server的最佳实践.

这是多列方法

多列方法

这是没有外键的方法

没有外键方法

这是基表方法

基表方法

sql-server associations polymorphic-associations database-normalization

53
推荐指数
1
解决办法
1万
查看次数

如何在使用has_many通过关联的模型上使用ActiveAdmin?

我在我的项目中使用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 ...

  1. 在医生页面显示每位患者的预约日期?
  2. 在医生页面中编辑每位患者的预约日期?

谢谢大家.:)

rubygems ruby-on-rails associations ruby-on-rails-3 activeadmin

53
推荐指数
2
解决办法
4万
查看次数

Rails 4通过方法查找或创建不起作用

我在工作和公司之间有一对多的关联,并且工作正常.在作业表单视图中,我有一个带有自动完成功能的公司名称的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)

ruby-on-rails associations ruby-on-rails-4

53
推荐指数
2
解决办法
3万
查看次数

添加与现有模型的关联

我想知道如何为模型添加关联.假设,我生成了两个模型

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表?我打算在我的代码中使用该表.

migration ruby-on-rails associations

50
推荐指数
3
解决办法
5万
查看次数

Sails.js填充嵌套关联

我自己有一个关于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)

nested associations populate node.js sails.js

49
推荐指数
3
解决办法
3万
查看次数

UML聚合与关联

我在这里,关于聚合和关联的另一个问题.我想学习一些UML的基础知识,所以我开始阅读Martin Fowler撰写的"UML精简版".我阅读了关于课程的两章,有一件事我想不到,那就是聚合与关联.在这本书中有这样的引用:

在UML之前的日子里,人们通常对聚合和关联是相当模糊的.无论是否含糊,它们总是与其他人不一致.因此,尽管出于不同的原因,许多建模者认为聚合很重要.因此UML包含聚合(图5.3),但几乎没有任何语义.正如Jim Rumbaugh所说,"把它想象成一个建模安慰剂" [Rumbaugh,UML Reference].

正如我从Stack Overflow上的这个引用和主题中所理解的那样,我使用这两个关系中的哪一个并不重要,它们的意思相同,或者是否有任何使用聚合而不是关联的情况是合理的和/或我不能改变一个到另一个而不改变类图的"含义"?

我问这个,因为这本书是从2003年开始的,有些事情可能会在这几年内发生变化.

uml associations aggregation

48
推荐指数
2
解决办法
5万
查看次数