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를 처음 사용하고 완전히 잃어 버렸다.
학생에게 표시하면 특정 학생을 탐색 할 때 uuid 또는 id를 사용하여 url을 수행합니까? –