我现在有问题,不知道该怎么做。它是 关于表之间的关系以及我是否需要外国人 密钥。
我的数据库中有两个表;用户和游戏。用户包括所有 用户信息(用户名,电子邮件,地址,密码等)游戏 包括所有游戏信息(名称,流派,控制台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
答案 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代码以及模型和方法以获得正确的结果。