2014-01-09 25 views
0

Rails應用程序中,我有以下設置:在軌,什麼是having_many項目的最佳實踐和having_one專項

項目的has_many頁。 頁面屬於項目。

使用項目控制器上的嵌套屬性創建和編輯頁面。

儘可能使用best_in_place完成所有編輯。

我現在想添加爲每個項目設置一個默認頁面的功能。經過不斷嘗試新東西很長一段時間,我想出了添加startpage_id到項目,並添加

belongs_to :startpage, class_name: "Page" 

的項目模型的解決方案,因爲HAS_ONE不工作了。這看起來不直觀,我感覺我做錯了什麼。

在這種情況下最好的做法是什麼?

+0

你說得對,這是不直觀的。爲什麼你的'has_one'關係不適用於'start_page?' – KappaNossi

回答

0
  1. 一個startpage_id字段添加到您Project型號

    class AddStartpageFlagToPage < ActiveRecord::Migration 
        def change 
        add_column :projects, :startpage_id, :integer 
        end 
    end 
    
  2. 寫一個實例方法:

    class Project 
        ... 
        def startpage 
        Project.pages.find(startpage_id) 
        end 
    
        def startpage=(page) 
        update_attribute(:startpage_id, page.id) if pages.include?(page) 
        end 
        ... 
    end 
    
0

我會一個布爾字段startpage添加到Page與默認值爲false

class AddStartpageFlagToPage < ActiveRecord::Migration 
    def change 
    add_column :pages, :startpage, :boolean, default: false 
    end 
end 

並添加找到起始頁的方法:

class Project < ActiveRecord::Base 
    belongs_to :pages 

    def startpage 
    pages.find_by(startpage: true) 
    end 
end 

您可能要添加驗證,確保只有一個每個項目的開始頁面。