我试图关联两个模型-AthletesResults
它们有以下字段:
运动员-: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/

10-10 10:49