将外键添加到rails数据库

时间:2012-03-07 01:20:36

标签: mysql ruby-on-rails migration foreign-keys

我现在有问题,不知道该怎么做。它是 关于表之间的关系以及我是否需要外国人 密钥。

我的数据库中有两个表;用户和游戏。用户包括所有 用户信息(用户名,电子邮件,地址,密码等)游戏 包括所有游戏信息(名称,流派,控制台user_id)。如 您可能已经注意到游戏表中包含用户ID 关联每个游戏需要的两者之间的关系 相关用户。

我想做的是在每个游戏show.html.erb页面上,我有一个按钮 应该发送电子邮件给该游戏的所有者以便让 他们现在已经签约的用户有兴趣进行交易 游戏。

我想知道我会怎么做。 user_id是否自动链接 所有用户关联的数据或只是id。如果没有那么我怎么样 将用户的电子邮件声明为外键,以便我拨打电话 用户将电子邮件发送给?

非常感谢任何帮助。谢谢

克里斯托弗·琼斯

更新

嘿我在我的games_controller show部分中有以下内容,但它没有用。它引发了以下错误:“chris230391@googlemail.com”的未定义方法`email':String。

def show
@game = Game.find(params[:id])

respond_to do |format|
  GameTrade.game_interest(@game.user.email).deliver
  format.html { redirect_to root_url }
  format.json { render json: @game }
end
end

所以我把它更改为以下内容,以便分解问题并找出它破坏了哪一行,并且声明该块位于第19行,即行g = GameTrade.game_interest(电子邮件)。我收到以下错误:

未定义的方法`email'为“chris230391@googlemail.com”:字符串

有什么想法吗?代码在

之下
def show
  @game = Game.find(params[:id])

respond_to do |format|
  user = @game.user
  email = user.email
  g = GameTrade.game_interest(email)
  g.deliver
  format.html { redirect_to root_url }
  format.json { render json: @game }
end
end

以下代码是我在邮件程序部分中的Game_trade.rb的代码:

  class GameTrade < ActionMailer::Base
    default :from => "christopher@aol.com"

    def game_interest(user)
      @user = user
      mail :to => user.email, :subject => "Game Interest"
    end
   end

2 个答案:

答案 0 :(得分:2)

看看this Stack Overflow question regarding Rails and referential integrity。您可能需要查看foreigner gem以在Rails迁移期间添加和删除外键。

但是,我很好奇你为什么要创建超出游戏范围的外键约束 - >你已经拥有的用户约束。您是否有理由对用户名和电子邮件字段进行非规范化?

答案 1 :(得分:1)

GameTrade.game_interest(@game.user.email).deliver行 在GameTrade模型中调用game_interest方法 (请发布该代码。)

这个方法需要一个参数而它没有得到它。

我还会考虑将方法和通话都用于 game_interest_deliver(@game.user.email).

我在sql数据仓库工作了5年,我最初对rails和外键感到很困惑。我学到的主要教训不是在适当时添加它们,而是更多地关注ruby代码以及模型和方法以获得正确的结果。