몇 시간 동안 디버깅 작업을 수행했지만 해결 방법을 찾을 수 없습니다. 내 거래 컨트롤러의 업데이트 방법에 @를 transaction.save를 호출하는 PUT 요청을 보낼 때, 내 서버 로그 뱉어 :레일 다형성 연관 초기화되지 않은 상수 오류
NameError - uninitialized constant Transaction::Respondable:
기본 관련 스키마, 요청이 거래를 할 수 있습니다 요청을 가질 수 모두 사용자 및 조직이다 , 사용자와 조직 모두 트랜잭션을 가질 수 있습니다. 차별화 된 요청은 요청을 초기화하는 사람/조직 1과 요청에 응답하는 사람/조직 2 사이에 트랜잭션이 존재한다는 것입니다. 즉, 트랜잭션은 요청 (및 사용자/조직 1 요청)과 사용자/조직 2 모두에 속합니다. 이제 사용자를 찾고 있습니다. 조직에 대한 코드를 포함하지 않을 것입니다. 아직 구현되지 않았습니다.
스키마 :
create_table "transactions", force: true do |t|
t.string "name", null: false
t.string "description", null: false
t.integer "listable_id", null: false
t.string "listable_type", null: false
t.integer "respondable_id", null: false
t.string "respondable_type", null: false
t.datetime "created_at"
t.datetime "updated_at"
end
listable는 요청을 의미한다 (이 또한 제공에서 올 수 있기 때문에, 또한 다형성,하지만 관련이없는 지금은) 여기에 관련 코드입니다. 응답 가능은 사용자를 나타냅니다.
create_table "requests", force: true do |t|
t.string "name", null: false
t.string "description", null: false
t.integer "requestable_id", null: false
t.string "requestable_type", null: false
t.datetime "created_at"
t.datetime "updated_at"
end
사용자 스키마는 다른 테이블에 대한 링크가 없으므로 관계가 없습니다 (관계 만 has_many 임).
class User < ActiveRecord::Base
...
has_many :requests, as: :requestable, dependent: :destroy
has_many :responded_transactions, class_name: 'Transaction', as: :respondable, dependent: :destroy
has_many :listed_transactions, through: :requests, source: :transactions
...
end
class Request < ActiveRecord::Base
validates :name, :description, :requestable, presence: true
has_many :transactions, as: :listable, dependent: :destroy
belongs_to :requestable, polymorphic: true
def relevant_transaction(user)
self.transactions.where('respondable_id = ?', user.id).first
end
end
class Transaction < ActiveRecord::Base
validates :name, :description, :listable, :respondable, presence: true
validates :respondable, uniqueness: { scope: :listable, message: 'You have already initialized a transaction on this item' }
belongs_to :listable, polymorphic: true
belongs_to :respondable, polymorphic: true
before_validation :set_name_and_description
private
def set_name_and_description
self.name = listable.name
self.description = listable.description
end
end
그리고 TransactionsController :
그리고 여기 내 모델입니다
module Api
class TransactionsController < ApplicationController
def create
@transaction = current_user.responded_transactions.new(transaction_params)
if @transaction.save
render :show, status: :created
else
render json: @transaction.errors.full_messages, status: :unprocessable_entity
end
end
def update
@transaction = Transaction.find(params[:id])
if @transaction.save
render :show, status: :saved
else
render json: @transaction.errors.full_messages, status: :unprocessable_entity
end
end
private
def transaction_params
params.require(:transaction).permit(:listable_id, :listable_type)
end
end
end
이에 대한 이상한 점은 레일 컨트롤러에 User.first.responded_transactions 또는 거래 등의 호출을 것입니다 . 첫 번째. 그러나 그것은 어딘가에 실패한 응답과 관련이있는 것처럼 보입니다 ... 어떤 도움이라도 대단히 감사하겠습니다!
관련 저장 방법에 게시 할 양식을 제시해야합니다. 또한 - 관련이없는 코드를 제거 할 수 있습니까 (예 : 생성 또는 업데이트시 발생하는 것인가? 다른 코드 제거)? 또한 전체 스택 추적을 제공 할 수 있다면 도움이 될 것입니다. 이 코드는 오류가 발생한 파일의 행 번호 (서버 로그에 있어야 함)를 표시하는 20-30 줄의 코드 여야합니다. –