0

这只是一个简单的问题。我试图通过将参数传递给构造函数来在 Rails 中创建一个新对象。但是,当我执行代码时,我得到

SQLite3::SQLException: no such column: awards.user_id: SELECT "awards".* FROM "awards"  WHERE "awards"."user_id" = 1

这意味着该对象未正确构造。我应该使用create而不是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
4

1 回答 1

1

你添加has_many :awardsUser模型中了吗?你添加belongs_to :userAward模型中了吗?您是否将列添加user_idAward模型中(使用迁移)?您需要做这三件事才能使用user.awards您正在使用的方法。阅读有关关联的 Rails 指南以获取更多详细信息。

此外,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
于 2012-06-24T01:08:45.630 回答