如何在RoR 3中为外键命名?

Har*_*Joy 3 foreign-keys ruby-on-rails-3

如何在RoR中为外键命名?

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

rails generate scaffold Table2 id:integer Table1:references
Run Code Online (Sandbox Code Playgroud)

此命令adds foreign key of Table1 in Table2但具有默认名称Table1_id.那么我怎么能给它自定义名称,my_table_f_key而不是Table1_id.

我正在使用Ruby 1.9.2和Rails 3.0.3.


编辑:-

在我的project.rb模型中:

belongs_to :own, :class_name => User
Run Code Online (Sandbox Code Playgroud)

在我的user.rb模型中:

has_many :owned_projects, :class_name => Project, :foreign_key => :owner
Run Code Online (Sandbox Code Playgroud)

我是如何创建项目模型的

rails generate scaffold Project name:string owner:integer
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ail 7

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

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

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

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

rails generate scaffold Question asker_id:integer editor_id:integer
Run Code Online (Sandbox Code Playgroud)

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

然后,在每个模型中:

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
Run Code Online (Sandbox Code Playgroud)

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

@question.asker # => User
@question.editor # => User

@user.asked_questions # => [Question, Question, Question]
@user.edited_questions # => [Question, Question]
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.