0

これは単純な質問です。コンストラクターにパラメーターを渡して、Railsで新しいオブジェクトを作成しようとしていました。ただし、コードを実行すると、

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

これは、オブジェクトが適切に構築されていないことを意味します。newの代わりにcreateを使用する必要がありますか?それも機能していません。

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 :awardsしましたか?モデルUserに追加belongs_to :userしましたか?(移行を使用して)モデルAwardに列user_idを追加しましたか?使用している方法Awardを使用できるようにするには、これら3つのことを行う必要があります。詳細については、アソシエーションに関するRailsガイドuser.awardsをお読みください。

また、appendRubyメソッドではありません-最も近いメソッドはです<<。次のように使用します。

a = Award.new(:name => "Nobody Award", :description => "From Jonathan", :category => "Community", :value => 1337, :level => 0, :handle => "nobody_award")
user.awards << a

createただし、次のメソッドを使用して、これを1行のコードにまとめることができます。

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 に答える