1

新しいRailsアプリを作成しました。(Deviseを介して生成された)1つのUserモデルとscaffoldを使用して生成されたPostモデルだけで完全に新鮮です。Postモデルでは、データベースに。という名前の列がありますuser_id

問題はuser_id、Postテーブルに常にあることです(投稿しているユーザーのにnil変更されません)。user_idそれはDeviseと関係があるのではないかと思いますが、完全にはわかりません。何をすべきかについての提案はありますか?

user.rb

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :email, :password, :password_confirmation, :remember_me

  has_many :posts, dependent: :destroy
end

post.rb

class Post < ActiveRecord::Base
  attr_accessible :title, :user_id
  belongs_to :user
end

gemfile

source 'https://rubygems.org'

gem 'rails', '3.2.13'
gem 'bootstrap-sass', '2.1'
gem 'devise'

group :development do
  gem 'sqlite3', '1.3.5'
end

group :assets do
  gem 'sass-rails',   '3.2.5'
  gem 'coffee-rails', '3.2.2'

  gem 'uglifier', '1.2.3'
end

gem 'jquery-rails', '2.0.2'

group :production do
    gem 'pg', '0.12.2'
end

gem 'will_paginate', '> 3.0'

post_controller(作成)

  def create
    @post = Post.new(params[:post])

    respond_to do |format|
      if @post.save
        format.html { redirect_to @post, notice: 'Post was successfully created.' }
        format.json { render json: @post, status: :created, location: @post }
      else
        format.html { render action: "new" }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end
4

1 に答える 1

3

設定していないので、user_id属性が設定されていないと思います。:)

  def create
    @post = Post.new(params[:post])
    @post.user_id = current_user.id # You need to add this line

    respond_to do |format|
      if @post.save
        format.html { redirect_to @post, notice: 'Post was successfully created.' }
        format.json { render json: @post, status: :created, location: @post }
      else
        format.html { render action: "new" }
        format.json { render json: @post.errors, status: :unprocessable_entity }
      end
    end
  end

補足:からへpost.user_idの外部キー制約だけでなく、(まだ行っていない場合は) null以外の制約を設定することをお勧めします。これらの制約は、これらの種類の問題を防止し、より簡単に診断するのに役立ちます。post.user_iduser.id

于 2013-03-25T18:36:14.813 に答える