내 RoR 애플리케이션의 일부가 웹 사이트 디자인 포트폴리오를 관리합니다. 하나의 웹 사이트 디자인에는 많은 이미지가 연관 될 수 있습니다. 하나의 이미지는 하나의 디자인에만 연결할 수 있습니다. has_many 문을 : through 매개 변수와 함께 사용하여 join 테이블을 통해 디자인과 이미지를 연결합니다. 그리고 이미지가 삭제되면 결합 테이블의 관련 항목을 삭제해야합니다. site_designs를 들어레일 조인 테이블 문제
class Image < ActiveRecord::Base
has_one :images_site_designs , :class_name => "ImagesSiteDesigns" , :dependent => :destroy
has_one :site_design , :through => :images_site_designs
end
:
class SiteDesign < ActiveRecord::Base
belongs_to :client
has_many :images_site_designs , :class_name => "ImagesSiteDesigns"
has_many :images , :through => :images_site_designs
end
그리고 가입 테이블 images_site_designs : site_designs에 대한 새로운 이미지를 만들기
class ImagesSiteDesigns < ActiveRecord::Base
belongs_to :image
belongs_to :site_design
end
그래서 코드 작품을 folowing, 괜찮 그래서 난 다음 모델 이미지의 경우 이 세부 사항 :
@site_design = SiteDesign.find(params[:id])
@site_design.images << Image.new(params[:image])
하지만 난이 이미지를 다음 오류를 삭제하려고하면 나타납니다
ActiveRecord::StatementInvalid in ImagesController#destroy
Mysql::Error: Unknown column 'id' in 'where clause': DELETE FROM `images_site_designs` WHERE `id` = NULL
레일 images_site_designs 쿼리에 대한 잘못된 열 이름을 사용하는 것 같다 테이블을 가입 할 수 있습니다. 어떻게 해결할 수 있습니까?
UPD :
image_controller 기능 이미지 삭제 :
def destroy
@image = Image.find(params[:id])
@image.destroy
respond_to do |format|
format.html { redirect_to(images_url) }
format.xml { head :ok }
end
end
마이그레이션 :
class CreateImages < ActiveRecord::Migration
def self.up
create_table :images do |t|
t.string :url
t.string :name
t.text :description
t.timestamps
end
end
def self.down
drop_table :images
end
end
class CreateSiteDesigns < ActiveRecord::Migration
def self.up
create_table :site_designs do |t|
t.string :name
t.text :concept
t.text :description
t.integer :client_id
t.timestamps
end
end
def self.down
drop_table :site_designs
end
end
class CreateImagesSiteDesigns < ActiveRecord::Migration
def self.up
create_table :images_site_designs , :id => false do |t|
t.integer :image_id
t.integer :site_design_id
end
end
def self.down
drop_table :images_site_designs
end
end
게시물에 마이 그 레이션 및 컨트롤러 기능 코드가 추가되었습니다. 미래에 나는 갤러리와 같은 다른 것들을 이미지에 연결하여 이미지 테이블의 구조를 명확하게해야한다. – ebsbk
앞으로의 미래에 대한 걱정. 문제를 해결하십시오. – hgmnz
지금 마이그레이션을 살펴보면서, 조인 모델에 대해 id => false라고 말합니다. id => false를 사용하면 타임 스탬프가없는 순수한 조인 모델이어야합니다 (단 두 개의 열/참조). 다음을 제거하십시오. id => false 및 코드가 작동해야합니다. 그렇지 않으면 has_many : through 대신 has_and_belongs_to_many를 사용하십시오. – hgmnz