Ruby on rails Rails:在ActiveRecord中使用不同的模型字段

Ruby on rails Rails:在ActiveRecord中使用不同的模型字段,ruby-on-rails,activerecord,ruby-on-rails-4,Ruby On Rails,Activerecord,Ruby On Rails 4,对Rails来说是个新手,遇到了一个我似乎无法理解的问题 我有两个模型,用户和职位。用户将具有“名称”属性,帖子将具有“标题”属性 在这两种情况下,我还希望维护一个slug,它将在保存之前打开,将适当的列转换为“sluggified”版本,并将其存储为slug。我已经有了我想要的逻辑,并且已经实现了,但是,我想将行为抽象为一个关注点 我似乎想不出一种方法来设置它——主要是因为源字段的动态特性。我希望能够做到以下几点: class User < ActiveRecord::Base in

对Rails来说是个新手,遇到了一个我似乎无法理解的问题

我有两个模型,用户和职位。用户将具有“名称”属性,帖子将具有“标题”属性

在这两种情况下,我还希望维护一个slug,它将在保存之前打开,将适当的列转换为“sluggified”版本,并将其存储为slug。我已经有了我想要的逻辑,并且已经实现了,但是,我想将行为抽象为一个关注点

我似乎想不出一种方法来设置它——主要是因为源字段的动态特性。我希望能够做到以下几点:

class User < ActiveRecord::Base
  include Sluggable

  act_as_slug :name
end

class Post < ActiveRecord::Base
  include Sluggable

  act_as_slug :title
end
class用户
不幸的是,无论我在关注点的实现上尝试了什么,我都遇到了障碍


虽然我想知道哪种实现方式是可行的,但我也很想知道这是否是一个解决问题的好用例

如果其他人正在寻找答案,这似乎是可行的(肯定会有更多经验的人提出更好的建议)。这些模型看起来就像原始帖子中建议的那样

module Sluggable
  extend ActiveSupport::Concern

  included do
    before_save :generate_slug
    class_attribute :sluggable_attribute

    def generate_slug
      self.sluggify(self.class.sluggable_attribute)
    end

    def sluggify(attribute)
      # Sluggify logic goes here
    end
  end

  module ClassMethods
    def acts_as_slug(value)
      self.sluggable_attribute = value
    end
  end
end