當has_many關聯處理的情況下,沒有subjob一個特定的工作?
簡短的回答:yes
-
龍答:
Rails的是不是一個神奇的精靈,它只是一個layer of abstraction來處理請求&關係數據庫。
這意味着如果你有一個has_many
關聯,你真的真的告訴Rails是使用SQL來查找關聯表中的原始模型的任何引用。
You can read more here。
這並不意味着你有有有一個關聯記錄的「許多」實例,或者甚至你必須有。它只是意味着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,它只是不把任何東西了。
是的,它會處理這種情況。想想簡單的'Article'有很多'Comments'的例子。創建文章的一個實例,不依賴於任何評論,但是您的文章可以自由發佈儘可能多的評論。 –
只要提到,就像你是一個學習者一樣,對於這種特殊情況你可以使用一個Job類,就像你可以擁有的:「has_many:subjobs,:class_name =>」Job「,:foreign_key =>:parent_job_id」。 –