2014-11-13 2 views
1

routes.rb :중첩 된 형태 보냅니다 대신 friendly_id의 ID를 POST 요청에

resources :courses, path: '' do 
    resources :students do 
    resources :awards 
    end 
end 

학생/show.html.erb

<%= form_for [@course, @student, @award] do |f| %> 

    <div class="field"> 
    <%= f.label :ticket %><br> 
    <%= f.text_field :ticket %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 

<% end %> 

모델/student.rb

belongs_to :course 
has_many :awards, dependent: :destroy 

extend FriendlyId 
friendly_id :uuid, use: [ :slugged, :finders ] 

컨트롤러/students_controller.rb

before_action :set_course 

def show 
    @student = @course.students.find_by_uuid! params[:id] 
    @award = @student.awards.build 
    @awards = @student.awards.load.where.not('id' => nil) # exclude empty row 
end 

private 

    def set_course 
    @course = Course.find_by_title!(params[:course_id]) 
    end 

    def student_params 
    params.require(:student).permit(:email, :uuid, :grade_point_average, :course_id) 
    end 

컨트롤러/awards_controller.rb 이제

before_action :set_variables 

def create 
    @award = @student.awards.build award_params 
    if @award.save 
    redirect_to course_student_path(@course, @student.uuid) 
    else 
    redirect_to course_student_path(@course, @student.uuid) 
    end 
end 

private 

    def set_variables 
    @course = Course.find_by_title! params[:course_id] 
    @student = @course.students.find_by_uuid! params[:student_id] 
    end 

    def award_params 
    params.require(:award).permit(:ticket, :student_id) 
    end 

, I는 다음과 같이 폼에서 보낸 내 POST 요청을 기대 :

POST "/3344-2334/students/hh36-f4t4-545t/awards" 

그러나 이것은 서버가 얻은 것입니다.

ID (5) 대신 friendly_id : 그것은 를 얻을 수 있기 때문에

ActiveRecord::RecordNotFound in AwardsController#create 

:

POST "/3344-2334/students/5/awards" 

은에서 나는 오류가 발생 UUID (hh36 - f4t4-545t). 제목하지만 자녀 (학생) 비우호적 점점 : ID

왜 부모 (과정)는 friendly_id 을 받고있다? 나는 Rails를 처음 사용하고 완전히 잃어 버렸다.

+0

학생에게 표시하면 특정 학생을 탐색 할 때 uuid 또는 id를 사용하여 url을 수행합니까? –

답변

2

학생 모델에 대해 반환되는 기본 매개 변수를 재정 의하여 ID 대신 uuid를 제공 할 수 있습니다. 이것을 학생 모델에 넣어보십시오.

def to_param 
uuid 
end 

당신은 또한 당신이 어떻게 friendlyId 작품을 이해하는 데 도움이 될 수 있습니다, this에서 좀 걸릴 수 있습니다.

+0

감사합니다. 내가 더 많은 장소에서 구현해야하는 것처럼 보입니다. Rails를 처음 접한다면, 행복감에서 절망에 이르는 롤러 코스터와 같을 것입니다 ... – unitario

+0

모든 열이 uuid라고 불리는 경우이 방법을 걱정할 필요없이 원하는 곳으로 반복하여 넣을 수 있습니다. –

+0

rails에 오신 것을 환영합니다. ☺️ –

관련 문제