Создать действие с непостоянной записью с постоянными связями? - PullRequest
2 голосов
/ 09 февраля 2012

Я пытаюсь сделать базовую страницу оформления заказа, и вот что у меня есть:

Оформление заказа осуществляется из transactions#new, а форма построена из нового Transaction объекта. Transaction имеет несколько вложенных моделей под ним:

class Transaction < ActiveRecord::Base
  # ...
  accepts_nested_attributes_for :user, :shipping_address, :products
  # ...
end

User, Product и Location (адрес доставки) могут сохраняться при переходе на страницу оформления заказа в зависимости от потока пользователей. Product всегда сохраняется по прибытии на страницу оформления заказа.

Эта настройка работает для меня до сих пор, за исключением случаев сбоя. Я пытался заново создать новую запись Transaction (с ранее введенной в пользовательской информации) для отображения соответствующих сообщений об ошибках, и я пытался сделать это в моем контроллере:

class TransactionsController < ApplicationController
  def new
    @transaction = Transaction.new
  end

  def create
    @transaction = Transaction.new params[:transaction]

    # ...
  end
end

Но я получаю эту ошибку:

ActiveRecord :: RecordNotFound в TransactionsController # create
Не удалось найти продукт с идентификатором = 1 для транзакции с идентификатором =

Параметры запроса

{"utf8" => "✓", "authenticity_token" => "blahblahblah", "Сделки" => { "products_attributes" => { "0" => { "ID" => "1", "Количество" => "1"}}}}

Кто-нибудь знает, что с этим? Дайте мне знать, если вам нужна дополнительная информация о моей настройке здесь ... попытался свести эту проблему к самым необходимым ...


class Transaction < ActiveRecord::Base
  has_many :product_transactions
  has_many :products, :through => :product_transactions
end

и

class Product < ActiveRecord::Base
  has_many :product_transactions
  has_many :transactions, :through => :product_transactions
end

и

class ProductTransaction < ActiveRecord::Base
  belongs_to :transaction
  belongs_to :product
end

1 Ответ

0 голосов
/ 10 февраля 2012

Итак, причина того, что вы получаете эту ошибку, в том, что вы поставляете id с products_attributes, так как вы используете accepts_nested_attributes_for product с этим id ДОЛЖНО быть уже вАссоциация.Это связано с тем, что метод products_attributes= предполагает создание или изменение записей в ассоциации products.

Поскольку Product уже существует и вы просто пытаетесь создать ProductTransaction, вам нужно изменить accepts_nested_attributes_for, чтобы вместо него включить :product_transactions.

Эта часть вашего вопроса меня оттолкнула

User, Product и Location (адрес доставки) можно сохранить, когда вы прибудете на страницу оформления заказа,в зависимости от потока пользователя.Product всегда сохраняется по прибытии на страницу оформления заказа.

Я не знаю, нужно ли вам иметь возможность определять продукт ... Но , если вам нужночтобы создать Product на странице оформления заказа, было бы более разумно определить его в контексте ProductTransaction (т. е. ProductTransaction принимает product_attributes или product_id) вместоконтекст Transaction.

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