我是rails的新手并编写了一个包含两个模型job
和sub_job
的应用程序
在我的应用程序中,作业可以有zero
,one
或许多sub_jobs
has_many关联将为jobs
创建一对多关系。
我在相应的模型中写了以下内容
#app/models/job.rb
class Job < ActiveRecord::Base
has_many :sub_jobs
end
#app/models/sub_job.rb
class SubJob < ActiveRecord::Base
belongs_to :job
end
现在这意味着job
可以有多个sub_jobs
,但我的问题是:
当没有特定工作的子工作时,has_many关联会处理这种情况吗?
答案 0 :(得分:1)
当没有subjob时,has_many关联会处理这种情况 一份特别的工作?
简短回答:yes
-
答案很长:
Rails不是一个神奇的巫师,它只是一个layer of abstraction来处理请求&amp;关系数据库。
这意味着如果你有一个has_many
关联,你真正告诉Rails的是使用SQL来查找关联表中对原始模型的任何引用。< / p>
这并不意味着拥有拥有关联记录的“多个”实例,甚至根本不需要拥有任何关联记录。它只是意味着Rails将使用相关表中相应的foreign_key
查找任何相关记录。
例如......
#app/models/job.rb
class Job < ActiveRecord::Base
# columns id | title | description | created_at | updated_at
has_many :sub_jobs
end
#app/models/sub_job.rb
class SubJob < ActiveRecord::Base
# columns id | job_id | title | etc
belongs_to :job
end
job_id
列是foreign_key,因此Rails将使用它来查找任何相应的记录。
然后你可以这样做:
#app/controllers/jobs_controller.rb
class JobsController < ActionController::Base
def show
@job = Job.find params[:id]
end
end
#app/views/jobs/show.html.erb
<% if @job.sub_jobs.any? %>
<% @job.sub_jobs.each do |sub| %>
<%= sub.title %>
<% end %>
<% end %>
如果没有关联的sub_jobs,它就不会放任何东西。