标签: associations

关联,聚合和组合有什么区别?

关联,聚合和组合有什么区别?请解释一下实施情况.

oop uml associations composition aggregation

361
推荐指数
18
解决办法
34万
查看次数

导致此ActiveRecord :: ReadOnlyRecord错误的原因是什么?

这是在这个先前的问题之后得到回答的.我实际上发现我可以从该查询中删除一个连接,所以现在工作查询是

start_cards = DeckCard.find :all, :joins => [:card], :conditions => ["deck_cards.deck_id = ? and cards.start_card = ?", @game.deck.id, true]  
Run Code Online (Sandbox Code Playgroud)

这似乎有效.但是,当我尝试将这些DeckCards移动到另一个关联时,我得到ActiveRecord :: ReadOnlyRecord错误.

这是代码

for player in @game.players 
  player.tableau = Tableau.new
  start_card = start_cards.pop 
  start_card.draw_pile = false
  player.tableau.deck_cards << start_card  # the error occurs on this line
end
Run Code Online (Sandbox Code Playgroud)

和相关的模特(画面是桌上的球员卡)

class Player < ActiveRecord::Base
  belongs_to :game
  belongs_to :user
  has_one :hand
  has_one :tableau
end

class Tableau < ActiveRecord::Base
  belongs_to :player
  has_many :deck_cards
end  

class DeckCard < ActiveRecord::Base
  belongs_to :card
  belongs_to :deck …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord join ruby-on-rails associations

203
推荐指数
5
解决办法
7万
查看次数

Rails:dependent =>:destroy VS:dependent =>:delete_all

在rails指南中,它的描述如下:

如果对象与之关联,则会另外销毁对象,如果与之关联则:dependent => :destroy删除对象:dependent => :delete_all

对,很酷.但被摧毁和被删除之间的区别是什么?我试过两个,它似乎做同样的事情.

ruby model ruby-on-rails associations

188
推荐指数
4
解决办法
9万
查看次数

在rails中使用带有has_one关联的构建

在这个例子中,我创建了一个user没有profile,然后在profile为该用户创建一个.我尝试使用带有has_one关联的构建,但是爆炸了.我看到这个工作的唯一方法是使用has_many.本user应该只有最多只能有一个profile.

我一直在尝试这个.我有:

class User < ActiveRecord::Base
  has_one :profile
end

class Profile < ActiveRecord::Base
  belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

但当我这样做时:

user.build_profile 
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'profiles.user_id' in 'where clause': SELECT * FROM `profiles` WHERE (`profiles`.user_id = 4)  LIMIT 1
Run Code Online (Sandbox Code Playgroud)

在rails中有一种方法可以有0或1个关联吗?

ruby-on-rails database-relations associations has-one

136
推荐指数
2
解决办法
7万
查看次数

MongoDB多对多关联

你会如何与MongoDB进行多对多的关联?

例如; 假设您有一个Users表和一个Roles表.用户有很多角色,角色有很多用户.在SQL中,您将创建一个UserRoles表.

Users:
    Id
    Name

Roles:
    Id
    Name

UserRoles:
    UserId
    RoleId
Run Code Online (Sandbox Code Playgroud)

MongoDB中如何处理相同类型的关系?

many-to-many associations mongodb

128
推荐指数
4
解决办法
6万
查看次数

在Rails 3中构建vs新

在Rails 3 文档中,build关联方法被描述为与new方法相同,但是自动分配外键.直接来自文档:

Firm#clients.build (similar to Client.new("firm_id" => id))
Run Code Online (Sandbox Code Playgroud)

我在其他地方读过类似的内容.

然而,当我使用new(例如,some_firm.clients.new不带任何参数),新的客户端的firm_id关联自动创建.我现在正在控制台中盯着结果!

我错过了什么吗?文档是否有点过时(不太可能)?build和之间有什么区别new

ruby-on-rails associations ruby-on-rails-3

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

单向和双向JPA和Hibernate关联有什么区别?

单向和双向关联有什么区别?

由于在db中生成的表都是相同的,因此我发现的唯一区别是双向关联的每一侧都将引用另一侧,而单向不引用.

这是一个单向关联

public class User {
    private int     id;
    private String  name;
    @ManyToOne
    @JoinColumn(
            name = "groupId")
    private Group   group;
}

public class Group {
    private int     id;
    private String  name;
}
Run Code Online (Sandbox Code Playgroud)

双向关联

public class User {
    private int     id;
    private String  name;
    @ManyToOne
    @JoinColumn(
            name = "groupId")
    private Group   group;
}
public class Group {
    private int         id;
    private String      name;
    @OneToMany(mappedBy="group")
    private List<User>  users;
}
Run Code Online (Sandbox Code Playgroud)

区别在于该组是否拥有用户的参考.

所以我想知道这是唯一的区别吗?哪个推荐?

java orm hibernate jpa associations

122
推荐指数
4
解决办法
10万
查看次数

如何在Factory girl中创建has_and_belongs_to_many关联

鉴于以下内容

class User < ActiveRecord::Base
  has_and_belongs_to_many :companies
end

class Company < ActiveRecord::Base
  has_and_belongs_to_many :users
end
Run Code Online (Sandbox Code Playgroud)

您如何为公司和用户定义工厂,包括双向关联?这是我的尝试

Factory.define :company do |f|
  f.users{ |users| [users.association :company]}
end

Factory.define :user do |f|
  f.companies{ |companies| [companies.association :user]}
end
Run Code Online (Sandbox Code Playgroud)

现在我试试

Factory :user
Run Code Online (Sandbox Code Playgroud)

也许不出所料,这会导致无限循环,因为工厂递归地使用彼此来定义自己.

更令人惊讶的是,我没有提到如何在任何地方做到这一点,是否有一种模式来定义必要的工厂或我做了一些从根本上错误的事情?

ruby-on-rails associations has-and-belongs-to-many factory-bot

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

Rails迁移:t.references与替代名称?

所以我在学校的课程中有这样的create_table:

create_table :courses do |t|
  t.string :name
  t.references :course
  t.timestamps
end
Run Code Online (Sandbox Code Playgroud)

但是我想要它参考另外两个课程,如:

has_many :transferrable_as # A Course
has_many :same_as          # Another Course
Run Code Online (Sandbox Code Playgroud)

我可以说以下吗?

t.references :transferrable_as, :as=> :course
Run Code Online (Sandbox Code Playgroud)

migration ruby-on-rails associations

108
推荐指数
4
解决办法
6万
查看次数

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万
查看次数