我正在尝试关联两个模型 - Athletes
和Results
他们有以下字段:
运动员 - :name :year :gender
结果 - :name :event :performance
我已将belongs_to :athlete
添加到results.rb
&将has_many :results
添加到athletes.rb
我想使用:name属性作为用于关联两个模型的主键,因为目的是让所有运动员最初上传,然后只使用结果输入到本赛季的剩余时间。 / p>
我已将results_controller
编辑为以下内容:
def create
#this was the initial code....
#@result = Result.new(params[:result])
# This is the new code to try set up an association
@athlete = Athlete.where('name = ?', 'Peter')
@result = @athlete.results.create(params[:result])
respond_to do |format|
if @result.save
format.html { redirect_to @result, notice: 'Result was successfully created.' }
format.json { render json: @result, status: :created, location: @result }
else
format.html { render action: "new" }
format.json { render json: @result.errors, status: :unprocessable_entity }
end
end
端
然而,这会产生错误undefined method 'results' for #<ActiveRecord::Relation:0x36a2b28>
。我也希望使用行@athlete = Athlete.where("name = ?", params[:name])
,但它不断产生NULL参数值......
有人能够指出我正确的方向吗?
额外信息: 结果迁移
class CreateResults < ActiveRecord::Migration def change
create_table :results do |t|
t.string :name
t.string :event
t.decimal :performance
t.timestamps
end
#add in new line here
add_index :results, :name
end end
运动员迁移
class CreateAthletes < ActiveRecord::Migration
def change
create_table :athletes do |t|
t.string :name
t.integer :year
t.string :gender
t.timestamps
end
end
end
Result.rb:
class Result < ActiveRecord::Base
belongs_to :athlete
end
Athlete.rb
class Athlete < ActiveRecord::Base
has_many :results
end
答案 0 :(得分:1)
问题是Athlete.where('name = ?', 'Peter')
返回ActiveRecord :: Relation对象。使用
Athlete.where('name = ?', 'Peter').first
或动态查找方法
Athlete.find_by_name('Peter')
修改强>
另外,请务必将t.references :athlete
添加到结果表格中。
答案 1 :(得分:1)
您的结果表需要存储athlete_id。
create_table :results do |t|
t.references :athlete
t.string :name
t.string :event
t.decimal :performance
t.timestamps
end
引用将使用rails约定(在本例中为athlete_id)创建外键关联