我想要做的是创建展示位置模型,该模型将用于发布3个固定类别的工作,即实习,公司和自由职业者。将有一个安置菜单,将有3个实习,企业和自由职业者和基础在用户选择上,对于这三个类别,将显示相同的职位发布表单以创建职位。 在显示工作岗位时,将根据类别显示不同的视图。
我没有得到我应该如何实现这一点。我是否应该将展示位置和类别创建为不同的模型,并将关联作为放置中的许多类别和属于类别中的位置,但如果我这样做,则在类别模型中我有3个固定的选择,我不会接受用户的选择,那么如何在模型中添加这3个选项,这些选项将被修复并按类别为它们添加工作点?
如何实施此展示位置?
答案 0 :(得分:0)
很简单,你可以通过各种方式实现创建job_type,它有3个类别中的一个,并在创建工作岗位时给出下拉列表。
为了便于找到3个类别的创建范围,如
scope :freelance,where("job_type = ?",'freelance') ....
JobPost.freelance
提供自由职业岗位。
答案 1 :(得分:0)
将模型定义为
Class Jobpost
belongs_to :resource, :polymorphic => true, :dependent => :destroy
accepts_nested_attributes_for :resource
def resource_attributes=(params = {})
self.resource = spec_type.constantize.new unless self.resource
self.resource.attributes = params.select{|k| self.resource.attribute_names.include?(k) || self.resource.class::ACCESSOR.include?(k.to_sym)}
end
end
class Freelancer
has_one :jobpost, :as => :resource
end
向Jobpost添加字段以创建字段(resource_id:integer,resource_type:string)
#jobposts table
t.references :resource, :polymorphic => true
视图
= form_for(@jobpost, :url => jobposts_path, :method => :post) do |f|
= fields of Jobpost
= f.fields_for :resource, build_resource('freelancer') do |freelancer|
= fields of Freelancer
Jobpost助手为
module JobpostsHelper
def build_resource(klass)
klass = "{klass.capitalize}"
object = eval("#{klass}.new")
if @jobpost.resource.class.name == klass
object = @jobpost.resource
end
return object
end
end
单击Freelancer的链接时,使用javascript显示子类别(自由职业者等)的字段。提交表单时,会提交所有子类别的所有字段,但会在“resource_attributes =”方法中将其过滤掉。