【发布时间】:2014-11-13 14:42:49
【问题描述】:
routes.rb:
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 %>
models/student.rb
belongs_to :course
has_many :awards, dependent: :destroy
extend FriendlyId
friendly_id :uuid, use: [ :slugged, :finders ]
controllers/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
controllers/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
现在,我希望从表单发送的 POST 请求如下所示:
POST "/3344-2334/students/hh36-f4t4-545t/awards"
但这是服务器得到的
POST "/3344-2334/students/5/awards"
我收到错误消息:
ActiveRecord::RecordNotFound in AwardsController#create
因为它获取的是 :id (5) 而不是friendly_id :uuid (hh36-f4t4-545t)。
为什么家长(课程)得到一个friendly_id :title,而孩子(学生)得到一个不友好的:id?我是 Rails 新手,完全迷路了。
【问题讨论】:
-
对于学生显示,当您导航到特定学生时,url 是否带有 uuid 或 id ?
标签: ruby-on-rails ruby-on-rails-4 friendly-id