需要从另一个表添加列

时间:2019-09-12 08:43:48

标签: ruby-on-rails ruby

我有两个模型:<head> ... <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-PRMQXXX');</script> <!-- End Google Tag Manager --> <!-- Page-hiding snippet (recommended) --> <style>.async-hide { opacity: 0 !important} </style> <script>(function(a,s,y,n,c,h,i,d,e){s.className+=' '+y;h.start=1*new Date; h.end=i=function(){s.className=s.className.replace(RegExp(' ?'+y),'')}; (a[n]=a[n]||[]).hide=h;setTimeout(function(){i();h.end=null},c);h.timeout=c; })(window,document.documentElement,'async-hide','dataLayer',4000, {'GTM-KL7XXXX':true});</script> <!-- Modified Analytics tracking code with Optimize plugin --> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-99999999-1', 'auto'); ga('require', 'GTM-KL7XXXX'); ga('send', 'pageview'); </script> ... </head> Account。在Profile中,我有Account列。我需要将role列添加到role表中。

我将包含在profiles Profile关联中,并将has_one :account包含在belongs_to :profile模型中。我认为解决方案就在那附近。

profile.rb

Account

acount.rb

class Profile < ApplicationRecord

  has_one :account
end

schema.rb

class Account < ApplicationRecord
  devise :registerable, :database_authenticatable, :rememberable,
         :trackable, :confirmable, :lockable, :recoverable, :validatable

  belongs_to :profile, foreign_key: 'profile_id'
  enum role: %i[user admin]
end

我要在 create_table "accounts", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.string "remember_token" t.integer "sign_in_count", default: 0, null: false t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.inet "current_sign_in_ip" t.inet "last_sign_in_ip" t.string "confirmation_token" t.datetime "confirmed_at" t.datetime "confirmation_sent_at" t.string "unconfirmed_email" t.integer "failed_attempts", default: 0, null: false t.string "unlock_token" t.datetime "locked_at" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.bigint "profile_id", null: false t.integer "role", default: 0 t.index ["profile_id"], name: "index_accounts_on_profile_id" end create_table "profiles", force: :cascade do |t| t.string "last_name", null: false t.string "first_name", null: false t.string "middle_name" t.string "email", null: false t.text "about" t.date "hire_date", null: false end 列中添加到profiles表中的哪个对象。

1 个答案:

答案 0 :(得分:0)

仅使用从role访问accounts数据的函数

class Profile < ApplicationRecord
  def role
    return account.role unless account.nil?
  end
end