2014-09-29 65 views
0

可以使用某種選項創建Rails ActiveRecord屬性嗎?這是我的意思。假設我們有一個名爲Article的模型,它定義了博客文章。其中一個屬性表示,這篇文章是一個包含圖片的帖子,一個包含圖片的帖子或一個純文本的帖子。每個選項都會觸發不同的佈局進行渲染。屬性具有一定數量的預定義選項。Ruby on Rails使用選項創建模型屬性,從

如何在模型中添加這種屬性「帖子類型」?

+0

感謝答覆,多態性似乎是完美的這種情況。 – vitalym 2014-09-30 10:59:46

回答

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

實現多態對象,@ankitg顧名思義,是如果您希望您的對象在系統的不同部分之間表現不同,那麼該走的路。但是,如果您在視圖中只需要一點自定義內容,則此方法可能適用於您。

您可以add an attribute to your model調用post_type,然後在視圖中呈現不同的html,具體取決於post_type。例如:

在你看來

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