Ruby on rails 一个表中相同表的两个外键的Rails关联

Ruby on rails 一个表中相同表的两个外键的Rails关联,ruby-on-rails,associations,Ruby On Rails,Associations,我是RoR的新手,仍然在与协会打交道。我需要在另一个模型中有两个对特定模型的引用。框架代码不起作用,我得到一个“未初始化常量”错误 生成命令: script/generate scaffold BaseModel name:string script/generate scaffold NewModel name:string base1:references base2:references db:migrate 生成的模型: class NewModel < ActiveRecord

我是RoR的新手,仍然在与协会打交道。我需要在另一个模型中有两个对特定模型的引用。框架代码不起作用,我得到一个“未初始化常量”错误

生成命令:

script/generate scaffold BaseModel name:string
script/generate scaffold NewModel name:string base1:references base2:references
db:migrate
生成的模型:

class NewModel < ActiveRecord::Base
     belongs_to :base1
     belongs_to :base2
end
我猜它映射了名称,所以在我的create方法中,我尝试显式设置BaseModel实例:

@new_model = NewModel.new(params[:new_model])
@base1 = BaseModel.find(1) # this exists
@base2 = BaseModel.find(2) # this exists
@new_model.base1 = @base1  # This throws the same error as above
有什么我遗漏的吗?

Rails的大部分魔力来自约定而非配置。通过根据指南命名,Rails可以猜测大多数配置选项。ActiveRecord::关联也不例外

任何ActiveRecord关联的第一个参数是将在模型中使用的名称。这通常是另一个型号的名称,这是惯例。默认情况下,类名是camelcase中关联名称的单数。关联中的默认外键是用“\u id”后缀的关联名称。如果您的关联名称与这些模式下的类名或外键不匹配,则需要将它们作为选项提供

这将满足您的要求:

class NewModel
  belongs_to :base1, :class_name => "BaseModel"
  belongs_to :base2, :class_name => "BaseModel"
end
就我个人而言,我会给这些协会提供比base1和base2更具描述性的名称。大概是这样的:

评级表:id、评级者id、评级者id、评级

class Rating
  belongs_to :rater, :class_name => "User"
  belongs_to :rated_user, :class_name => "User", :foreign_key => "rated_id"
end

可以使用不同的示例,但选择此示例是为了在需要外键选项时突出显示。

传递给
方法的符号必须是另一个模型的单数名称。因此,对于您的示例,它将是:

class NewModel < ActiveRecord::Base 
  belongs_to :base_model 
end 
classnewmodel
  • 有关更多详细信息,请参阅
class Rating
  belongs_to :rater, :class_name => "User"
  belongs_to :rated_user, :class_name => "User", :foreign_key => "rated_id"
end
class NewModel < ActiveRecord::Base 
  belongs_to :base_model 
end