. , form_for Person . fieldset , , :
<%= form_for @person do |f| %>
<fieldset id="base">
<%= f.label :name %>
<%= f.check_box :name %>
</fieldset>
<fieldset id="accountant">
<%= fields_for :accountant do |f| %>
<%= f.label :cpa %>
<%= f.check_box :cpa %>
<% end %>
</fieldset>
<fieldset id="software_developer">
<%= fields_for :software_developer do |f| %>
<%= f.label :full_stack %>
<%= f.check_box :full_stack %>
<% end %>
</fieldset>
_for , POST "create" , :
params[:person] = { :name => "Joe Smith", ... }
params[:accountant] = { :cpa => true, ... }
params[:software_developer] = { :full_stack => false, ... }
. select:
<%= select_tag :job_type, options_for_select(@job_types) %>
[: job_type] . "create" , , . case:
case params[:job_type]
when :accountant
@person = Accountant.new(params[:person].merge(params[:accountant]))
when :software_developer
@person = SoftwareDeveloper.new(params[:person].merge(params[:software_developer]))
when ...
end
, . , , , params [: job_type] , . - :
@person = params[:job_type].constantize.new(params[:person].merge(params[params[:job_type].underscore])
, .
, jQuery, , . .change() select_tag , "id", . , .
, , , .
, , / .