ユーザーによって作成された Challenge というモデルがあります。それに伴う難易度もあります。チャレンジを作成して作成者 (ユーザー) と難易度を渡すと、難易度アソシエイトは機能しますが、作成者 (ユーザー) は機能しません。最も奇妙な部分は、Challenge オブジェクトを見ると、関連付けられている Author キーが表示されることです。
challenge = Challenge.first
challenge.author (prints Nil) #Doesn't even run a Query
次のコードを使用してチャレンジを作成すると、user_id が Nil になります。
user = User.find(1)
diff = Difficulty.find(1)
Challenge.create(:author => user, :difficulty => diff, :title => "My Challenge")
このコードを使用してチャレンジを作成すると、ユーザーはチャレンジとの関係を取得し、チャレンジはユーザーの user_id を取得します。ただし、ユーザーからチャレンジにしか移動できません。ユーザーへのチャレンジは Nil を返します。
user = User.find(1)
diff = Difficulty.find(1)
chall = Challenge.create(:difficulty => diff, :title => "My Challenge")
user.authored_challenges << chall
ここに私のモデルとテーブルがあります
# Models
class User < ActiveRecord::Base
has_many :authored_challenges, :class_name => "Challenge"
attr_accessible :display_name, :authored_challenges
end
class Reward < ActiveRecord::Base
has_many :challenges
attr_accessible :name, :value, :challenges
end
class Challenge < ActiveRecord::Base
belongs_to :reward
belongs_to :author, :class_name => "User"
attr_accessible :title, :description, :reward, :author
end
# Tables
create_table :users do |t|
t.string :display_name
t.timestamps
end
create_table :rewards do |t|
t.string :name
t.float :value
t.timestamps
end
create_table :challenges do |t|
t.integer :user_id
t.integer :reward_id
t.string :title
t.string :description
t.timestamps
end