我试图关联两个模型-Athletes
和Results
它们有以下字段:
运动员-:name :year :gender
结果-:name :event :performance
我已将belongs_to :athlete
添加到results.rb
并将has_many :results
添加到athletes.rb
我想使用:name属性作为将这两个模型关联起来的主键,因为这样做的目的是让所有运动员先上传,然后在赛季剩余时间使用结果输入。
我已将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])
这一行,但是它总是产生一个空参数值…有人能告诉我正确的方向吗?
额外信息:
结果迁移
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
结果.rb:
class Result < ActiveRecord::Base
belongs_to :athlete
end
运动员.rb
class Athlete < ActiveRecord::Base
has_many :results
end
最佳答案
问题是Athlete.where('name = ?', 'Peter')
返回activerecord::relation对象。要么使用
Athlete.where('name = ?', 'Peter').first
或动态查找方法
Athlete.find_by_name('Peter')
编辑
还要确保将
t.references :athlete
添加到结果表中。关于ruby-on-rails - 基本数据库关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8845413/