레일의 STI 또는 기타 상속을 이해하지 못했습니다.레일 4 : 상속 관련 문제
양식이있는 디자인을 구현해야합니다. 업로드 할 때 제출하지만 사용자가 로그인하지 않은 경우 openid를 통해 로그인해야합니다 (지원되는 액세스 만 가능). 따라서 이것은 리다이렉트 (redirect)를 의미하며, 내가 지금까지 생각해 낼 수있는 가장 좋은 점은 일시적으로 데이터를 저장하는 것이고, 로그인에 성공하면 실제로 실제 객체를 생성한다는 것입니다. 개체에 대해 두 개의 개별 테이블을 갖고 싶었습니다. Site
개체는 생성 될 개체이고 Sitetmp
은 임시 저장소이며 nonce라는 추가 필드가 있습니다.
DB를 (로그인에 성공한, 비표 비교되며, 확인되면, Sitetmp
인스턴스가 삭제되고 새로운 Site
하나 생성) :
#schema.rb
create_table "sites", force: true do |t|
t.string "name"
t.date "date"
t.text "description"
t.float "lat"
t.float "lon"
t.date "updated"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "sitetmps", force: true do |t|
t.string "nonce"
t.string "name"
t.date "date"
t.text "description"
end
서브 클래스 :
#app/models/sitetmp.rb
class Sitetmp < Site
attr_accessor :nonce
end
수퍼 클래스 :
#app/models/site.rb
class Site < ActiveRecord::Base
validates :name, uniqueness: true, :presence => true,
:length => { :minimum => 5 }
validates :date, :presence => true
has_many :images, :inverse_of => :site
end
모두 설정 한 것 같았지만 실제로 로그인에 성공한 임시 개체에 액세스하려고 할 때, 그것은이되는 원인 컨트롤러 나
SQLite3::SQLException: no such column: sites.nonce: SELECT "sites".* FROM "sites" WHERE "sites"."nonce" = '059253928646750523787961570357' LIMIT 1
에게 코드를 알려줍니다
분명히if nonce
@tmp = Sitetmp.find_by nonce: nonce
내가하여 Sitetmp
인스턴스에 액세스하려고 그 nonce
속성이 있지만 rails
클래스는 Site
클래스에 실제로 액세스하려고합니다 (nonce
속성이 없음).
내가 뭘 잘못하고 있니? 유효한 Site
개체를 만들기 위해 nonce
에 의해 Sitetmp
개체를 올바르게 찾는 방법은 무엇입니까?
, 나는 이미했던 독립 Sitetmp 클래스를 만들 수있는 제안에 대한 응답을 받아 :) – faboolous