의 원인이 테이블에 가입 I가 기본적으로 교수 특정 수준 많은 주제의 지식을 가지고 있음을 의미하려고하는 다음과 같은 모델. 피험자는 고정되어 있으므로 새로운 과목이 생성되지 않으며 지식 조인 표를 통해 교수와 관련이 있습니다.레일 : 두 속성의 고유성은 500 오류
class Subject < ActiveRecord::Base
# Self Associations
has_many :subcategories, :class_name => "Subject"
belongs_to :category, :class_name => "Subject",:foreign_key => "parent_id"
# Associations
has_many :knowledges
has_many :professors, :through => :knowledges
end
class Professor < ActiveRecord::Base
# Associations
has_many :knowledges
has_many :subjects, :through => :knowledges
...
end
class Knowledge < ActiveRecord::Base
# Associations
belongs_to :professor
belongs_to :subject
has_one :level
attr_accessible :subject_id, :professor_id
validates :subject_id, :uniqueness => { :scope => :professor_id }
end
나는 자신의 계정에 제목을 추가 할 수있는 교수를하게됩니다 양식을 갖고 싶어하고, (내가 너무 수준을 삽입 할 수 원하는대로) 나는 지식의 형태를 가질하기로 결정했다.
<%= simple_form_for @knowledge,:url => professor_knowledges_path, :html => { :class => 'form-horizontal' } do |f| %>
<div class="control-group select optional">
<%= label_tag "Subject Type", nil, :class => "select optional control-label"%>
<div class="controls">
<%= select_tag "Parent Subject", options_from_collection_for_select(@parent_subjects, "id", "name"), :id => "knowledge_parent_subject" %>
</div>
</div>
<%= f.input :subject_id, :collection => @subjects, :label => "Subject" %>
<%= f.input :level %>
<%= f.button :submit, t('add_form'),:class => 'btn-primary' %>
<% end %>
을 그리고 에 나는이 가지고있는 지식 컨트롤러의 조치를 만들 :
그것은 다음과 같습니다
def create
@knowledge = Knowledge.create(:professor_id => current_professor.id, :subject_id => params[:knowledge][:subject_id])
end
내가 얻을 것으로 예상/원하는 것 인 액티브 말 유일성 위반이 있기 때문에이 지식을 삽입 할 수 없지만 로그와 롤백에 500이 표시되지만 실행이 진행되는 것 같습니다. 그래서 제 질문은 : 제가 뭘 잘못하고 있습니까, 아니면 어떻게이 모델링 상황을 개선 할 수 있습니까? 그 모델의 필드를 가지고 싶기 때문에 폼을 조인 모델과 관련시켜야한다고 생각합니다.하지만 어쩌면 틀렸을 수도 있고 쉬운/깨끗한 방법으로 할 수 있습니다.
편집는 :
Started POST "/professors/1/knowledges" for 127.0.0.1 at 2012-07-01 00:45:39 -0700
Processing by KnowledgesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"4JVyxWnIh37kyBwLwLGTHk/znsI1c5wrJvaWjKKT5tM=", "Parent Subject"=>"1", "knowledge"=>{"subject_id"=>"1"}, "commit"=>"Añadir", "professor_id"=>"1"}
Professor Load (0.4ms) SELECT `professors`.* FROM `professors` WHERE `professors`.`id` = 1 LIMIT 1
Completed 500 Internal Server Error in 4ms
내가 몇 가지 조건을 추가 :
의견 중 하나의 질문으로
, 바로 여기 롤백 후 양식의 제출의 로그와 500 오류입니다
def create
@knowledge = Knowledge.new(:professor_id => current_professor.id, :subject_id => params[:knowledge][:subject_id])
if @knowledge.save
flash[:notice] = "Success..."
redirect_to professor_path(current_professor)
else
render :action => 'new'
end
end
을 그리고 이것은 실제로 표시 : 이 같은 조치를 생성 예외가 대신 객체에 오류를 추가하고 내가 그 상황을 관리 할 수의 발생 이유를
Completed 500 Internal Server Error in 6ms
ActiveRecord::RecordInvalid (Validation failed: Subject has already been taken):
궁금 : s를 500를 잘 작성 후 다음과 같습니다. 다음 라인이 뭘 해야하는가요?
validates :subject_id, :uniqueness => { :scope => :professor_id }
500을 기록하는 로그를 게시하십시오. 도움이 될 것입니다. – prasvin
로그가 게시되었습니다. – Nobita
예, 오류가 개체에 추가되어 있어야합니다. 나는 그것이 500 오류를 일으키는 것이라고 생각하지 않습니다. KnowlegesController # create의'if @ knowledge.save' 줄 앞에서 디버거를 사용하거나 실행을 중단 할 수 있습니까? 그런 다음 유효성 검사 오류가'@ 지식'에 삽입되었는지 확인하기 위해'@ knowledge.save' 및'@ knowledge.save! '를 시도하십시오. 콘솔에서도 확인하실 수 있습니다. 또한 전체 스택 추적의 요지를 게시 할 수 있습니까? 나는 그것이 유일성의 유효성 확인 때문이 아니라는 강한 느낌을 가지고 있습니다. – prasvin