对 Rails 很陌生,遇到了一个我似乎无法弄清楚的问题。
我有 2 个模型,User 和 Post。用户将具有“名称”属性,帖子将具有“标题”属性。
在这两种情况下,我还想维护一个 slug,它将在 before_save 上将适当的列转换为“sluggified”版本并将其存储为 slug。我已经有了我想要的逻辑并且已经开始工作,但是,我想将行为抽象为一个问题。
我似乎想不出一种方法来设置它——主要是因为源字段的动态特性。我希望能够执行以下操作:
class User < ActiveRecord::Base
include Sluggable
act_as_slug :name
end
class Post < ActiveRecord::Base
include Sluggable
act_as_slug :title
end
不幸的是,无论我在关注的实现方面做了什么尝试,我都遇到了困难。
虽然我想知道哪种实现方式是可能的,但我也很想知道这是否是一个值得关注的好用例?
最佳答案
这似乎有效,如果其他人正在寻找答案(绝对愿意接受经验丰富的人提出的更好建议)。这些模型看起来与原始帖子中建议的一样。
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
关于ruby-on-rails - rails : Using different model fields in ActiveRecord Concern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21793070/