无法从其他模型添加属性

时间:2019-09-12 15:50:37

标签: ruby-on-rails ruby active-model-serializers

我有两个模型:AccountProfile。 我想使用属性Profile渲染json API,并在Account中包含一个属性。

profile_serializer.rb

class ProfileSerializer < ActiveModel::Serializer
  attributes :first_name, :middle_name, :last_name, :role

  def role
    #UserAccountSerializer.new(object.role)
    object.account.role
  end
end

account_serializer.rb

class UserAccountSerializer < ActiveModel::Serializer
  attributes :role
end

profile.rb

class Profile < Grape::API
  desc 'Current user profile'
  get '/', serializer: ProfileSerializer do
    current_user.profile
  end
end

accounts_controller.rb

class AccountsController < AdminController
    def index
      @accounts = Account.all
    end

    def show
      render json: @account
    end

    def update
      @account = Account.find(params[:id])
      redirect_to accounts_path if @account.update(role: params[:role])
    end
  end

account.rb

class Account < ApplicationRecord
  belongs_to :profile

  enum role: %i[user admin]
  after_initialize :set_default_role, if: :new_record?

  def set_default_role
    self.role ||= :user
  end
end

profile.rb

class Profile < ApplicationRecord
  has_one :account
end

schema.rb

create_table "accounts", force: :cascade do |t|
    t.string "email", default: "", null: false
    t.bigint "profile_id", null: false
    t.integer "role", default: 0
    t.index ["email"], name: "index_accounts_on_email", unique: true
    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"
end

葡萄给我这个错误:undefined method `role' for nil:NilClass

0 个答案:

没有答案