如何实现具有3个固定类别的职位发布功能

时间:2012-05-10 12:43:28

标签: ruby-on-rails ruby-on-rails-3 model associations model-associations

我想要做的是创建展示位置模型,该模型将用于发布3个固定类别的工作,即实习,公司和自由职业者。将有一个安置菜单,将有3个实习,企业和自由职业者和基础在用户选择上,对于这三个类别,将显示相同的职位发布表单以创建职位。 在显示工作岗位时,将根据类别显示不同的视图。

我没有得到我应该如何实现这一点。我是否应该将展示位置和类别创建为不同的模型,并将关联作为放置中的许多类别和属于类别中的位置,但如果我这样做,则在类别模型中我有3个固定的选择,我不会接受用户的选择,那么如何在模型中添加这3个选项,这些选项将被修复并按类别为它们添加工作点?

如何实施此展示位置?

2 个答案:

答案 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 =”方法中将其过滤掉。