0

첫 번째로 나쁜 영어를 유감스럽게 생각합니다. 나는 아직도 배우고있다.collection_select를 사용하여 validates_uniqueness_of를 사용하면 Ruby on Rails 오류가 발생합니다.

문제

  • has_many :registers
  • has_many :solutions, through : :registers

솔루션

  • :

    나는 내 DB에서 3 개 테이블이210

  • has_many :problems, through : :registers

등록

  • belongs_to: problem
  • belongs_to :solution

시스템이 잘 작동한다. 3 개의 테이블 모두에 새로운 데이터를 삽입 할 수 있습니다. 문제와 해결 방법을 선택할 수있는 테이블/모델 Register에 대한 전망에서

,이 같은 collection_select를 사용합니다 :

= form_for @register do |f| 

    .field 
    = f.label :problem_id 
    = collection_select(:register, :problem_id, @problems, :id, :name, {}, { :multiple => false }) 
    .field 
    = f.label :solution_id 
    = collection_select(:register, :solution_id, @courses, :id, :name, {}, { :multiple => false }) 
    .field 
    = f.label :entry_at 
    = f.datetime_select :entry_at 
    .actions = f.submit 

내가 Register이 유효성 검사를 추가 할 경우에만 나타납니다 문제 : 그런 다음

validates_uniqueness_of :student_id , scope: :course_id 

내가 얻을 :

> undefined method `map' for nil:NilClass 
> = collection_select(:register, :problem_id, @problems, :id, :name, {}, { :multiple => false }) 

그리고 이유를 모르겠습니다.

그래서, 컨트롤러에 의해 검증을 시도 :

def create 
    @register = Register.new(register_params) 
    problem_id = @register.problem_id 
    solution_id = @register.solution_id 
    if Register.exists?(['problem_id LIKE ? AND solution_id LIKE ?', problem_id, solution_id ]) 
    render 'new' 
    else 
    @register.save 
    respond_with(@register) 
    end 
end 

그러나 오류가 남아있다.

나는 그 원인이 collection_select라고 생각하지만, 그것을 해결하는 방법을 모른다.

한 번 더 말하면서 나는 3 개의 DB 테이블 모두에서 날짜를 유지할 수 있습니다. 그러나 중복을 피하려고하면 오류가 나타납니다.

+0

@problems가 설정되고 있습니까? 'collection_select (: register, : problem_id, @problems, : id, : name, {}, {: multiple => false})' – Eric

+0

@Eric. 그것은 새로운 RegisterController, def new에 설정됩니다. – Paulo

답변

0

이 내가이 문제 해결 방법은 다음과 같습니다

def create 
     @register = register.new(register_params) 

     #if @register.save 
     # respond_with(@register) 
     #else 
     # @register = register.all 
     # render :new 
     #end 
     problem_id = @register.problem_id 
     solution_id = @register.solution_id 

     if register.exists?(['problem_id LIKE ? AND solution_id LIKE ?', problem_id, solution_id ]) 
      @register = register.new 
      @solutions = Solution.all 
      @problems = Problem.all 
      flash[:error] = "Problem alread in the register for this solution" 
      render 'new' 
     else 
      @register.save 
      respond_with(@register) 
     end 

     end 
관련 문제