Railscast에 따라 광범위하게 조인 테이블을 만들고 있습니다 . http://railscasts.com/episodes/17-habtm-checkboxes-revised?view=asciicast
개체에 has_many 레코드를 설정할 수없고 다음 오류가 발생합니다.
2.0.0p353 :012 > invoice.fly_ids
(0.9ms) SELECT "flies".id FROM "flies" INNER JOIN "categorizations" ON "flies"."id" = "categorizations"."fly_id" WHERE "categorizations"."invoice_id" = 1
ActiveRecord::StatementInvalid: PG::Error: ERROR: operator does not exist: integer = character varying
LINE 1: ...ies" INNER JOIN "categorizations" ON "flies"."id" = "categor...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "flies".id FROM "flies" INNER JOIN "categorizations" ON "flies"."id" = "categorizations"."fly_id" WHERE "categorizations"."invoice_id" = 1
나는 그것을 작동시킬 수 없으며 'categorizations'테이블이 정수 대신 varchar를 사용하기 때문 이라고 생각 합니다.
내 마이그레이션 파일은 다음과 같습니다.
class CreateCategorizations < ActiveRecord::Migration
def change
create_table :categorizations do |t|
t.integer :user_id
t.integer :fly_id
t.timestamps
add_index :categorizations, :user_id
add_index :categorizations, :fly_id
end
end
end
그러나 생성 된 데이터베이스 테이블을 보면 : user_id와 : fly_id가 모두 varchar입니다.
마이그레이션 파일에서 정수를 지정할 때 이러한 필드를 varchar로 만드는 이유는 무엇입니까?
(이게 작동하더라도 문제가 해결되지 않을 수 있습니다 ...)
편집하다:
사용자 모델 :
class User < ActiveRecord::Base
....
has_many :invoices
....
end
송장 모델 :
class Invoice < ActiveRecord::Base
attr_accessible :active
validates :user_id, presence: true
belongs_to :user
has_many :categorizations
has_many :flies, through: :categorizations
end
송장 마이그레이션 :
class CreateInvoices < ActiveRecord::Migration
def change
create_table :invoices do |t|
t.boolean :active
t.integer :user_id
t.timestamps
end
add_index :invoices, :user_id
end
end
분류 모델 :
class Categorization < ActiveRecord::Base
attr_accessible :fly_id, :user_id
belongs_to :invoice
belongs_to :fly
end
분류 마이그레이션 :
class CreateCategorizations < ActiveRecord::Migration
def change
create_table :categorizations do |t|
t.integer :user_id
t.integer :fly_id
t.timestamps
add_index :categorizations, :user_id
add_index :categorizations, :fly_id
end
end
end
비행 모형 :
class Fly < ActiveRecord::Base
attr_accessible :description, :name
validates :description, :name, presence: true
has_many :categorizations
has_many :invoices, through: :categorizations
end
플라이 마이그레이션 :
class CreateFlies < ActiveRecord::Migration
def change
create_table :flies do |t|
t.string :name
t.string :description
t.timestamps
end
end
end
HABTM
HABTM을 사용하는 경우 테이블에 기본 키 ( id
) 가 필요하지 않습니다 .
create_table :invoices_flies, :id => false do |t|
t.references :user
t.references :flies
end
has_many : through
을 사용하는 경우 has_many :through
테이블은 자체 모델이므로 기본 키를 사용합니다.
#app/models/user.rb
Class User < ActiveRecord::Base
has_many :categorizations
has_many :flies, through: :categorizations
end
#app/models/fly.rb
Class Fly < ActiveRecord::Base
has_many :categorizations
has_many :users, through: :categorizations
end
#app/models/categorization.rb
Class Categorization < ActiveRecord::Base
belongs_to :fly
belongs_to :user
end
create_table :categorizations do |t|
t.integer :user_id
t.integer :fly_id
end
귀하의 문제는 아마도 귀하의 협회 구조와 관련이있을 것입니다. 어떻게 설정했는지에 대한 정보를 제공해 주시겠습니까?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다