Rails has_many belongs_to nil问题

时间:2014-03-08 22:17:13

标签: ruby-on-rails ruby migration associations

我是Rails初学者,我现在正在为我的模型添加一些基本关联。我的两个模型中有以下内容:

用户模型:

class User < ActiveRecord::Base
  has_many :photos, dependent: :destroy
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  validates_uniqueness_of :username
end

照片模型:

class Photo < ActiveRecord::Base
  belongs_to :user
  has_attached_file :image,
                    styles: { medium: '300x300>', thumb: '100x100>' },
                    default_url: '/images/:style/missing.png'
  validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/
end

添加上述内容后,我运行了相应的迁移:

rails g migration AddUserIdToPhotos user_id:integer

rake db:migrate

user_id已添加到Photos表中,但是当我添加新照片时,user_id字段设置为nil。 当我去psql进行双重检查时,它甚至没有显示nil,只是一个空字段。

这是照片控制器中的代码:

def create
  photo = Photo.new(photo_params)
  if photo.save
    Pusher['the_force'].trigger('new_photo', {
      url: photo.image.url(:medium),
      description: photo.description,
      id: photo.id
    })
  end
  redirect_to '/'
end

private

def photo_params
  params.require(:photo).permit(:image, :description, :user_id)
end

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果您没有从表单传递用户并且想要保存已登录的用户,则必须在创建照片实例时传递它。

  photo = Photo.new(photo_params, :user => current_user)