【问题标题】:add relationship in ruby on rails在 ruby​​ on rails 中添加关系
【发布时间】:2015-01-13 05:54:18
【问题描述】:

我有两张桌子
我在脚手架的帮助下创建的主题和主题元素 之后我想添加主题和主题元素之间的关系

可以使用脚手架添加关系吗?

或者我们可以添加任何其他方式?

我尝试了这个解决方案Adding foreign key to a rails model,但没有成功添加

请帮助我在 ruby​​ on rails 上的新手 提前谢谢!!!

【问题讨论】:

    标签: ruby-on-rails relationship


    【解决方案1】:

    假设我们有两个模型(主题,元素) 我正在尝试添加以下 has-to-many 关联: 1.一个主题可以有多个元素 2.一个元素属于一个主题。

    从控制台创建这些模型:

    rails g model subject number:string name:string 
    
    rails g model element element_number:string part_number:string subject:references
    

    检查您的迁移:(当您通过上述迁移创建元素模型时,将自动添加以下迁移)

     #app/db/migrate/XXXXX_create_elements.rb
    class CreateElements < ActiveRecord::Migration
      def change
        create_table :elements do |t|
          t.string :element_number
          t.string :part_number
          t.references :subject, index: true
          t.timestamps null: false
        end
        add_foreign_key :elements, :subjects
      end
    end
    

    现在检查你的模型文件:

     #app/model/subject.rb
     class Subject < ActiveRecord::Base 
       has_many :elements
     end
    
     #app/model/element.rb 
      class Element < ActiveRecord::Base
       belongs_to :subject #note-this one will be automatically added 
      end
    

    希望这会有所帮助:)

    【讨论】:

    • 我已经使用这个命令创建了应用程序“sudo ruby​​ script/generate scaffold subject_element id:decimal sub_ele_name:text des:text”所以它也会创建crud操作视图现在我想添加一个关系主题和主题元素
    • 这个解决了你的问题?
    • 我会说不,不要手动操作。如果您已经拥有表/模型,那么请考虑添加一个新列(仅使用迁移)。这就是导轨的工作原理! :)
    • 不过,如果您坚持手动操作,请确保向下迁移 -> 手动更改 -> 向上迁移!
    • 我尝试根据您的文件和模型文件手动编辑迁移文件,然后“运行 rake db:migrate” 之后我添加“

      " in new.html.erb 所以当我按下创建按钮时将给出以下错误“ActiveRecord::AssociationTypeMismatch in Subject elementsController#create Subject(#69925002548940) 预期,得到字符串(#69925048599560)”
    【解决方案2】:

    您发布的“向 Rails 模型添加外键”链接确实是正确的方法,但您仍然需要进行一些配置。

    如果您使用低于 Rails 4 的任何东西,您的 subject_element.rb 模型上应该有一个 attr_accessible。如果没有,请添加它。并将subject_id 添加到列表中,使其看起来像这样:

    class SubjectElement < ActiveRecord::Base
    
    attr_accessible :subject_id
    
    ...
    

    请注意,这是一个列表,因此多个条目看起来像这样(示例)

    attr_accessible :title, :subject_id
    

    然后,记得添加 has_manybelongs_to 助手:

     class Subject < ActiveRecord::Base 
       has_many :elements
     end
    
     class Element < ActiveRecord::Base
      belongs_to :subject 
     end
    

    如果您还在苦苦挣扎,请将您的subject.rbsubject_element.rb迁移

    发给我

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多