0

我有一个包含“user_id”和“post_id”字段的表测试。user_id 我通过 current_user.id 和 post_id 从 post 表中获取。为此,我这样做:在测试控制器中:-

def create
  @user = current_user
  @test = Test.new(params[:test])
  @post = Post.find(params[:id])
  @test.post_id = @post.id
  @test.user_id = @user.id
respond_to do |format|
   @test.save
   format.html { redirect_to(:back, :notice => "successfull") }
  else
    format.html { render :action => "new" }
  end
end

在我的模型中,我创建了关联:-

在 test.rb 中:

 belongs_to :post

在 post.rb 中:

has_many :test

查看页面是:

 = form_for @test, :validate => true do |f|
   .span
     = f.text_field :email, :placeholder =>"Email Address"
   .span
     = f.label :name
     = f.text_field :name
   .span
     = f.submit "Save"

user_id 正确保存,但对于 post_id 它给出错误:

 Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

我该如何解决这个问题?

4

2 回答 2

1

您确定仅在登录时才应访问 create 方法,即 current_user 不应为 nil。

如果您create仅在方法中收到此错误,则它应该在线

@test.user_id = @user.id

这是因为是 nil ,@user而您正在调用.id.nil

已编辑

您需要从表单中发送 post_id,假设您在 @post 中获取 post 对象

添加以下行您的视图

= form_for @test, :validate => true do |f|
    = hidden_field_tag "post_id", @post.id

并更新

@post = Post.find(params[:id])

@post = Post.find(params[:post_id])
于 2013-04-25T08:27:11.740 回答
1

是 Rails 中的标准消息,它告诉您您尝试调用.id一个nil值。

我怀疑你current_usernil。你可以确定raise current_user.inspect我认为which会告诉你它的零

您确定您已登录,因此您current_user的不是 nil

于 2013-04-25T08:29:36.740 回答