我是 Rails 的新手,正在 rails3 (beta4) 上构建一个小型测试应用程序。
我正在使用 Authlogic 来管理用户 session (以标准方式设置为 per this tutorial)
我搭建并设置了一个卡片模型(基本上是一篇文章),并为 belongs_to
和 has_many
关系设置了基本的事件记录关联
用户.rb
has_many :cards
card.rb
belongs_to :user
我将我的外键列添加到我的卡片表:user_id
,默认为 1
一切正常。我完成了我的观点,我可以看到关联,卡片可以属于不同的用户,这一切都很棒。
但是创建新卡的时候好像抓不到当前活跃用户
cards_controller.rb
def new
@card = Card.new
@card.user = current_user
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @card }
end
end
current_user
在应用程序 Controller 中定义,available to view here
user_id
正在传递 NULL
并且没有任何内容写入数据库 user_id
列,使其默认为 1
而不是实际登录用户的 ID。
我尝试了一些显而易见的事情,比如 @user = current_user
这可能非常简单,但今天是我真正使用 Rails 的第一天 - 谢谢!
最佳答案
现在,它显示为您将用户设置为 new
操作,而不是 create
操作。
我看到 2 个选项,后者更好:
如果您继续在
new
操作中保留@card.user = current_user
,您可以设置一个隐藏的输入字段card[user_id]
其中可以包含当前用户的 ID。这是一个完全糟糕的主意,因为任何人都可以将他们想要的任何东西扔进那个领域。尝试将
@card.user = current_user
移到create
操作中的@card.save
行之前。这样用户就不会乱动它,它会在实际要保存时将其设置为您的卡片对象。
关于ruby-on-rails - 外键 (class_id) 未填充在 belongs_to 关联中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3128619/