Ruby on Rails创建模型属性,其中包含可供选择的选项

时间:2014-09-29 19:53:31

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

是否可以使用某种选项创建Rails ActiveRecord属性?这就是我的意思。假设我们有一个名为Article的模型来定义博客文章。其中一个属性表示本文是带有图像的帖子,带有图像的帖子或带有纯文本的帖子。每个选项都会触发不同的布局进行渲染。属性具有一定数量的预定义选项。

如何将此类属性“post type”添加到模型中?

2 个答案:

答案 0 :(得分:1)

您的案例看起来像need for implementing Polymorphism。你可以做点什么

class Article < ActiveRecord::Base
  belongs_to :articleable, polymorphic: true
end

class Post < ActiveRecord::Base
  has_many :articles, as: :articleable
end

class PlainText < ActiveRecord::Base
  has_many :articles, as: :articleable
end

#Migration
class CreateArticless < ActiveRecord::Migration
  def change
    create_table :articles do |t|
      t.string  :name
      t.integer :articleable_id
      t.string  :articleable_type
      t.timestamps
    end
  end
end

所以基本上你会有一个文章表,'articleable_type'将存储什么类型的文章

答案 1 :(得分:1)

如果您希望对象在系统的不同部分中表现不同,那么实现多态对象(如@ankitg建议的那样)是可行的方法。但是,如果您在视图中只需要一些自定义内容,这种方法可能对您有用。

您可以add an attribute to your model调用post_type,然后在视图中呈现不同的html,具体取决于post_type。例如:

在您的视图中

<% if article.post_type == 'image' %>
  <!-- some code -->
<% else %>
  <!-- some other code -->