Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中,拥有多个项目和一个特殊项目的最佳实践是什么_Ruby On Rails_Design Patterns_Activerecord - Fatal编程技术网

Ruby on rails 在rails中,拥有多个项目和一个特殊项目的最佳实践是什么

Ruby on rails 在rails中,拥有多个项目和一个特殊项目的最佳实践是什么,ruby-on-rails,design-patterns,activerecord,Ruby On Rails,Design Patterns,Activerecord,在rails应用程序中,我有以下设置: 项目有很多页面。 页面属于某个项目 使用“项目”控制器上的嵌套属性创建和编辑页面 在可能的情况下,所有编辑都使用最佳位置进行 现在我想为每个项目添加一个默认页面的功能。经过长时间的尝试,我想出了将startpage_id添加到项目中并添加 belongs_to :startpage, class_name: "Page" 对于项目模型,因为有一个不可行。这似乎不直观,我觉得我做错了什么 在这种情况下,最佳做法是什么 将startpage\u id

在rails应用程序中,我有以下设置:

项目有很多页面。 页面属于某个项目

使用“项目”控制器上的嵌套属性创建和编辑页面

在可能的情况下,所有编辑都使用最佳位置进行

现在我想为每个项目添加一个默认页面的功能。经过长时间的尝试,我想出了将startpage_id添加到项目中并添加

    belongs_to :startpage, class_name: "Page"
对于项目模型,因为有一个不可行。这似乎不直观,我觉得我做错了什么

在这种情况下,最佳做法是什么

  • startpage\u id
    字段添加到您的
    项目
    模型中

    class AddStartpageFlagToPage < ActiveRecord::Migration
      def change
        add_column :projects, :startpage_id, :integer
      end
    end
    

  • 我会在
    页面
    中添加一个布尔字段,默认值为
    false

    class AddStartpageFlagToPage < ActiveRecord::Migration
      def change
        add_column :pages, :startpage, :boolean, default: false
      end
    end
    
    class AddStartpageFlagToPage
    并添加查找起始页的方法:

    class Project < ActiveRecord::Base
      belongs_to :pages
    
      def startpage
        pages.find_by(startpage: true)
      end
    end
    
    class项目

    您可能需要添加验证,以确保每个项目只有一个起始页。

    您认为这是不直观的,这是正确的。为什么您的
    有一个
    关系不能与
    开始页面一起工作?
    class Project < ActiveRecord::Base
      belongs_to :pages
    
      def startpage
        pages.find_by(startpage: true)
      end
    end