Создать не сохраняющуюся запись из-за несуществующего поля - PullRequest
0 голосов
/ 18 мая 2018

Не могу понять это.Я использую Postgres для приложения на Ruby, и моя схема выглядит следующим образом:

ActiveRecord::Schema.define(version: 20180518200146) do
  create_table "amazons", force: :cascade do |t|
    t.text "auth_token"
    t.text "marketplace"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "shop_id"
    t.boolean "three_speed"
    t.text "seller_id"
    t.string "shipping_countries", array: true
  end

  create_table "shops", force: :cascade do |t|
    t.string "shopify_domain", null: false
    t.string "shopify_token", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.boolean "paid", default: false
    t.boolean "setup", default: false
    t.string "carrier_id"
    t.index ["shopify_domain"], name: "index_shops_on_shopify_domain", unique: true
  end

  add_foreign_key "amazons", "shops"
end

Я удалил shopify_domain из таблицы Amazons.Но я запустил эту миграцию, и, как вы можете видеть в моей схеме, она прошла.

Однако я пытаюсь create создать новую запись и получаю следующее сообщение об ошибке: NoMethodError (undefined method shopify_domain for #<Amazon:0x000000041fb9c8>

I 'm создаем новую запись Amazon, определяя ее следующим образом:

current_shop.amazons.create(
  marketplace: marketplace,
  seller_id: seller_id,
  auth_token: auth_token,
  shipping_countries: countries,
  shop_id: current_shop.id)

, где current_shop - метод, который получает текущий магазин из сеанса.Это работает отлично.

Куда я сбился с пути?

РЕДАКТИРОВАТЬ: Я пошел и проверил PG, чтобы убедиться, и поле не их тоже.Вот что PG имеет:

 id                 | bigint                      | not null default nextval('amazons_id_seq'::regclass)
 auth_token         | text                        | 
 marketplace        | text                        | 
 created_at         | timestamp without time zone | not null
 updated_at         | timestamp without time zone | not null
 shop_id            | integer                     | 
 three_speed        | boolean                     | 
 seller_id          | text                        | 
 shipping_countries | character varying[]         | 

РЕДАКТИРОВАТЬ: Вот модель Amazon

class Amazon < ActiveRecord::Base
  include ShopifyApp::SessionStorage
  belongs_to :shop
end

И затем это все сообщение об ошибке:

NoMethodError (undefined method `shopify_domain' for #
<Amazon:0x000000041fb9c8>
Did you mean?  shop_id_change):

app/controllers/concerns/amazon_creds_concern.rb:55:in `save_amazon_creds'
app/controllers/concerns/amazon_creds_concern.rb:23:in `create_amazon_client'
app/controllers/amazon_creds_controller.rb:9:in `amazon_credentials_check'

И затем строки кода, соответствующие сообщению об ошибке, начиная снизу вверх: app/controllers/amazon_creds_controller.rb:9:in amazon_credentials_check

render json: {amazon_creds_status: create_amazon_client(marketplace, seller_id, auth_token, countries), countries: countries.blank?}

Затем app/controllers/concerns/amazon_creds_concern.rb:23:in

save_amazon_creds(marketplace, seller_id, auth_token, countries)

Наконец app/controllers/concerns/amazon_creds_concern.rb:55:in

current_shop.amazons.create(
  marketplace: marketplace,
  seller_id: seller_id,
  auth_token: auth_token,
  shipping_countries: countries,
  shop_id: current_shop.id)

1 Ответ

0 голосов
/ 19 мая 2018
include ShopifyApp::SessionStorage

добавляет

validates :shopify_domain, presence: true, uniqueness: true

к вашему классу Amazon.

Вам нужно указать shopify_domain в этом классе (или использовать форвард), или вам нужно удалить включение изКласс Amazon.

Кстати, для shopify_token.

https://github.com/Shopify/shopify_app/blob/master/lib/shopify_app/session/session_storage.rb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...