0

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

我不知道我应该如何实现这一点。我是否应该将展示位置和类别创建为不同的模型,并将关联作为展示位置中的多个类别和属于类别中的展示位置,但如果我这样做,在类别模型中我有 3固定的选择,我不会接受用户的选择,那么我怎样才能在模型中添加这三个选择,这将是固定的,并为他们添加职位类别呢?

我怎样才能实现这个放置的东西?

4

2 回答 2

0

这很简单,您可以通过各种方式实现一种方法是创建具有 3 个类别之一的 job_type,并在创建职位发布时提供下拉菜单。

为了便于找出 3 个类别的创建范围,例如

scope :freelance,where("job_type = ?",'freelance') ....

JobPost.freelance提供自由职业职位。

于 2012-05-10T13:54:10.767 回答
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:整数,resource_type:字符串)

#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 显示子类别(freelancer 等)的字段。提交表单时,所有子类别的所有字段都已提交,但它们在“resource_attributes=”方法中被过滤掉。

于 2012-08-28T07:03:36.103 回答