0

フィールド「user_id」と「post_id」を持つテーブル テストがあります。user_id post テーブルから current_user.id と post_id でフェッチします。このために私は:テストコントローラで: -

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

これは@userが nil であり、 を呼び出し.idているためですnil

編集済み

@post で投稿オブジェクトを取得していると仮定して、フォームから post_id を送信する必要があります

ビューに次の行を追加します

= 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_userはだと思いますnil。あなたはraise current_user.inspectそれがnilであることをあなたに伝えるだろうと思う

あなたがcurrent_usernilにならないようにログインしていることを確認してください

于 2013-04-25T08:29:36.740 に答える