如何在Ruby on Rails 3中为外键字段取一个既规范又易记的名字?

2026-04-11 18:591阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计505个文字,预计阅读时间需要3分钟。

如何在Ruby on Rails 3中为外键字段取一个既规范又易记的名字?

在RoR中,为外键命名,可以使用`belongs_to`或`has_many`关联并在其中指定自定义的外键名称。以下是如何修改上述命令以提供自定义外键名称的示例:

rubyrails generate scaffold Table2 id:integer Table1:references, foreign_key:table1_id

此命令会在`Table2`模型中为`Table1`的外键添加`table1_id`字段,而不是默认的`table1_id`。

如何在RoR中为外键命名?

我使用以下命令给出外键:

rails generate scaffold Table2 id:integer Table1:references

此命令在Table2中添加Table1的外键,但默认名称为Table1_id.那么如何为它提供自定义名称,例如my_table_f_key而不是Table1_id.

我正在使用Ruby 1.9.2和Rails 3.0.3.

编辑:-

在我的project.rb模型中:

belongs_to :own, :class_name => User

在我的user.rb模型中:

has_many :owned_projects, :class_name => Project, :foreign_key => :owner

我是如何创建项目模型的

rails generate scaffold Project name:string owner:integer

现在当我从Project访问user_id时
project.owner.userid它抛出异常.

根据您在评论中的回复,这是实现您想要做的事情的一种方式:

假设您的应用程序中有两个模型(用户和问题),以及两个不同的关系:

>用户问了很多问题,问题属于Asker
>用户编辑了很多问题,问题属于编辑

您可以通过以下方式实现此结构:

rails generate scaffold Question asker_id:integer editor_id:integer

在generate命令中指定id:integer是多余的,因为Rails会自动为您生成该列.在关系方面命名外键也是常规的(即asker_id).

然后,在每个模型中:

如何在Ruby on Rails 3中为外键字段取一个既规范又易记的名字?

class Question < ActiveRecord::Base belongs_to :asker, :class_name => User belongs_to :editor, :class_name => User end class User < ActiveRecord::Base has_many :asked_questions, :class_name => Question, :foreign_key => :asker_id has_many :edited_questions, :class_name => Question, :foreign_key => :editor_id end

这样,您可以像这样使用它们:

@question.asker # => User @question.editor # => User @user.asked_questions # => [Question, Question, Question] @user.edited_questions # => [Question, Question]

希望这可以帮助.

本文共计505个文字,预计阅读时间需要3分钟。

如何在Ruby on Rails 3中为外键字段取一个既规范又易记的名字?

在RoR中,为外键命名,可以使用`belongs_to`或`has_many`关联并在其中指定自定义的外键名称。以下是如何修改上述命令以提供自定义外键名称的示例:

rubyrails generate scaffold Table2 id:integer Table1:references, foreign_key:table1_id

此命令会在`Table2`模型中为`Table1`的外键添加`table1_id`字段,而不是默认的`table1_id`。

如何在RoR中为外键命名?

我使用以下命令给出外键:

rails generate scaffold Table2 id:integer Table1:references

此命令在Table2中添加Table1的外键,但默认名称为Table1_id.那么如何为它提供自定义名称,例如my_table_f_key而不是Table1_id.

我正在使用Ruby 1.9.2和Rails 3.0.3.

编辑:-

在我的project.rb模型中:

belongs_to :own, :class_name => User

在我的user.rb模型中:

has_many :owned_projects, :class_name => Project, :foreign_key => :owner

我是如何创建项目模型的

rails generate scaffold Project name:string owner:integer

现在当我从Project访问user_id时
project.owner.userid它抛出异常.

根据您在评论中的回复,这是实现您想要做的事情的一种方式:

假设您的应用程序中有两个模型(用户和问题),以及两个不同的关系:

>用户问了很多问题,问题属于Asker
>用户编辑了很多问题,问题属于编辑

您可以通过以下方式实现此结构:

rails generate scaffold Question asker_id:integer editor_id:integer

在generate命令中指定id:integer是多余的,因为Rails会自动为您生成该列.在关系方面命名外键也是常规的(即asker_id).

然后,在每个模型中:

如何在Ruby on Rails 3中为外键字段取一个既规范又易记的名字?

class Question < ActiveRecord::Base belongs_to :asker, :class_name => User belongs_to :editor, :class_name => User end class User < ActiveRecord::Base has_many :asked_questions, :class_name => Question, :foreign_key => :asker_id has_many :edited_questions, :class_name => Question, :foreign_key => :editor_id end

这样,您可以像这样使用它们:

@question.asker # => User @question.editor # => User @user.asked_questions # => [Question, Question, Question] @user.edited_questions # => [Question, Question]

希望这可以帮助.