【发布时间】:2016-02-27 00:12:20
【问题描述】:
我有一个使用用户和会话的 Rails 应用程序。用户有很多广告,并且在将用户模型更改为有很多广告时,我遇到了一个未知属性错误。
Advertisements_controller.rb
class AdvertisementsController < ApplicationController
before_action :require_user, only: [:new, :create]
def index
@advertisements = Advertisement.all
end
def new
@advertisement = Advertisement.new
end
def create
@advertisement = current_user.advertisements.create(advertisement_params)
if @advertisement.save
redirect_to '/advertisements/index'
else
redirect_to '/advertisements/new'
end
end
private
def advertisement_params
params.require(:advertisement).permit(:title, :body)
end
end
user_controller.rb
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save then
session[:user_id] = @user.id
redirect_to '/'
else
redirect_to '/signup'
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :email, :password)
end
end
用户.rb
class User < ActiveRecord::Base
has_many :advertisements, dependent: :destroy
# Rails's built-in password security
has_secure_password
end
广告.rb
class Advertisement < ActiveRecord::Base
belongs_to :user
end
创建广告时,我得到一个未知属性 user_id @advertisement = current_user.advertisements.create(advertisement_params)
这一行。它应该调用位于 application_controller.rb 上的 current_user
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
编辑:现在如果我创建和advertisement 然后列出它,我得到
[#<Advertisement id: 1, created_at: "2016-02-27 00:50:55", updated_at: "2016-02-27 00:50:55", title: "my advert", body: "it belongs to me!", users_id: nil, user_id: 1>
注意users_id: nil。我认为,虽然它正在填充user_id,但它并没有做正确的belongs_to 事情。 users_id: nil 来自哪里?我只是担心,因为当我删除一个用户时,我希望他们的所有advertisements 也被删除(而不是浪费 ym 数据库上的空间)。
【问题讨论】:
-
您可以尝试 1. 运行并重新启动您的应用 2. 检查广告表是否有
user_id、title和body列。 -
您的数据库中的
advertisements表中有user_id列吗? -
我的
advertisements表中有belongs_to :users -
@archana 我不知道。如果我添加它,它会是什么类型?我认为它不是一个字符串。
-
ID 列是整数类型
标签: ruby-on-rails ruby activerecord has-many