ruby-on-rails - 外键 (class_id) 未填充在 belongs_to 关联中

标签 ruby-on-rails ruby activerecord associations ruby-on-rails-3

我是 Rails 的新手,正在 rails3 (beta4) 上构建一个小型测试应用程序。

我正在使用 Authlogic 来管理用户 session (以标准方式设置为 per this tutorial)

我搭建并设置了一个卡片模型(基本上是一篇文章),并为 belongs_tohas_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 个选项,后者更好:

  1. 如果您继续在new 操作中保留@card.user = current_user,您可以设置一个隐藏的输入字段card[user_id] 其中可以包含当前用户的 ID。这是一个完全糟糕的主意,因为任何人都可以将他们想要的任何东西扔进那个领域。

  2. 尝试将 @card.user = current_user 移到 create 操作中的 @card.save 行之前。这样用户就不会乱动它,它会在实际要保存时将其设置为您的卡片对象。

关于ruby-on-rails - 外键 (class_id) 未填充在 belongs_to 关联中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3128619/

相关文章:

ruby-on-rails - Rails : Previous and Next record from previous query

sql - ActiveRecord 查询在 DISTINCT 之后强制执行 ORDER BY

ruby-on-rails - 如何在没有直接属于_to 的情况下建立一种 "belongs_to :through"关联?

ruby-on-rails - rails : Devise not properly destroying user session cookie after calling destroy_user_session_path

ruby-on-rails - 嵌套 Controller Action 测试

ruby-on-rails - has_many :through 的源反射错误

ruby-on-rails - 在 rails 3 中太阳黑子搜索中的命名范围

ruby-on-rails - 如何在 resque-retry 和 Rails 4 中测试重试和失败?

ruby - 为什么 guard 几乎 100% 使用 cpu?

ruby-on-rails - any_instance should_receive 无法正常工作