Ruby on rails Rails有一个关联

Ruby on rails Rails有一个关联,ruby-on-rails,associations,rails-activerecord,Ruby On Rails,Associations,Rails Activerecord,我现在正在我的网站上建立一个投资组合部分。我将其设置为一个投资组合有一个与之关联的类别 class Portfolio < ApplicationRecord has_one :category end 这就是视图中的内容: <li><i class="icon_link"></i><span>Category: </span><%= @portfolio.category.name %></li>

我现在正在我的网站上建立一个投资组合部分。我将其设置为一个投资组合有一个与之关联的类别

class Portfolio < ApplicationRecord
  has_one :category
end
这就是视图中的内容:

<li><i class="icon_link"></i><span>Category: </span><%= @portfolio.category.name %></li>
  • 类别:

  • 我记得以前使用过这个语法,没有任何问题。任何帮助都会很好。我试图在here=上找到这个问题,但无法使它们正常工作。

    很遗憾,您的分类表中不存在公文包id。验证类别的迁移文件。如果外键是在类别上设置的,那么它应该可以工作

    Rails将has_one/behing_关联命名为-如果在
    Portfolio
    中有
    category_id
    列,则“一个Portfolio属于一个category”和“一个category有一个Portfolio”。您需要将模型改写为:

    class Portfolio < ApplicationRecord
      belongs_to :category
    
    class Category < ApplicationRecord
      has_one :portfolio
    

    每当您在rails中有关联时,该关联必须至少涉及两个实体(或模型)。在您的特定情况下,您已经通过
    has_one
    关联将
    投资组合
    类别
    关联。但是,您还需要在
    类别
    末尾指定关联。因此,在您的
    Category.rb
    model类中,您需要编写:

    class Category < ActiveRecord::Base
      belongs_to :portfolio    
      # other stuff
    end
    
  • 现在从终端运行
    rake db:migrate

  • 如果你重新加载你的服务器,你的问题应该得到解决


    指定
    所属关联的模型必须在相应的数据库表中具有主键属性。在您的情况下,如果
    类别
    模型具有
    属于
    关联,那么
    类别
    数据库表必须具有标题为
    投资组合id
    的字段,它不存在,因为我在portfolioI中只有类别id链接了文档,以便您可以看到示例。如果您想在您的公文包模型上有一个:类别,您应该将公文包id移动到类别表。类别数据库只是一个所有类别的列表,然后我用类别id引用公文包记录中的哪个类别。听起来您想使用属于:类别而不是有一个。您可以阅读有关的详细信息Rails文档中是否有一个/belishto关联?您确定更好的关联不会是与类别的belishto关联吗。所以公文包属于:范畴,范畴有很多:公文包。那么你的观点就行了。
    class Portfolio < ApplicationRecord
      belongs_to :category
    
    class Category < ApplicationRecord
      has_many :portfolio
    
    class Category < ActiveRecord::Base
      belongs_to :portfolio    
      # other stuff
    end
    
    def change
      add_column :categories, :portfolio_id, :integer
    end