ruby-on-rails - rails : Using different model fields in ActiveRecord Concern

标签 ruby-on-rails activerecord ruby-on-rails-4

对 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/

相关文章:

sql - “NOT IN”条件不适用于列表中的 'NULL'

ruby-on-rails - 语法错误 : (irb):26: both block arg and actual block given

ruby-on-rails - 如何使用 Active Record Rails 调用以数字开头的列名称?

ruby-on-rails - Rails 4 表单数据保存为 Nil

javascript - Rails 嵌套表单 - 编辑操作和 edit.html.erb 不会显示表单或相关帖子内容

ruby-on-rails - ActiveRecord::RecordNotFound 在 CountryController#home 中

javascript - Rails 4 - 如何在 vendor 文件中引用 javascript 源

ruby-on-rails - Paperclip 2.3.5 到 3.3.1 导致 url 与路径不同

ruby-on-rails - Rails 按对或运算查询事件记录

ruby-on-rails - Rails 和 Globalize - 加入范围内相关模型的翻译表