这只是一个简单的问题。我试图通过将参数传递给构造函数来在Rails中创建一个新对象。但是,当我执行代码时,我得到了
SQLite3::SQLException: no such column: awards.user_id: SELECT "awards".* FROM "awards" WHERE "awards"."user_id" = 1
表示对象未正确构造。我应该使用创建而不是 new 吗?这也不起作用。
def refresh_awards(user)
new_awards = []
if (user.karma < 40 ) #test award
a = Award.new(:name => "Nobody Award", :description => "From Jonathan", :category => "Community", :value => 1337, :level => 0, :handle => "nobody_award")
user.awards.append(a)
new_awards.append(a)
end
new_awards.each do |a|
flash[:notice] = "You received the " + a.name + "!"
end
end
答案 0 :(得分:1)
您是否已将has_many :awards
添加到User
模型中?您是否已将belongs_to :user
添加到Award
模型中?您是否已将user_id
列添加到Award
模型(使用迁移)?您需要执行以下三项操作才能使用您正在使用的user.awards
方法。请阅读Rails Guide on Associations了解更多详情。
此外,append
不是Ruby方法 - 最接近的方法是<<
。你可以这样使用它:
a = Award.new(:name => "Nobody Award", :description => "From Jonathan", :category => "Community", :value => 1337, :level => 0, :handle => "nobody_award")
user.awards << a
但是您可以使用create
方法将其整合到一行代码中:
a = user.awards.create(:name => "Nobody Award", :description => "From Jonathan", :category => "Community", :value => 1337, :level => 0, :handle => "nobody_award")
编辑:要在user_id
模型中创建Award
列,请从终端运行以下代码(在应用目录中):
rails generate migration AddUserIdToAward user_id:integer
rake db:migrate