【发布时间】:2017-04-26 19:19:00
【问题描述】:
我对 Ruby on Rails 还是很陌生,而且我还停留在某一点上。
我的数据库包含一个教师和一个课程模型。它们与 has_and_belongs_to_many 关联(目前不应更改)。
课程详情视图:
<p> Teacher:
<%= form_tag url_for(controller: 'courses', action: 'add_teacher') ,method: 'put' do%>
<%= select_tag :teacher, options_for_select(Teacher.all.collect {|t| [t._name, t.id]})%>
<%= hidden_field_tag(:course, value = @course.id) %>
<%= submit_tag 'hinzufügen' %>
<%end %>
<% end %></p>
Course_Controller:
def add_teacher
@course = Course.find(params[:course])
@teacher = Teacher.find(params[:teacher]) unless params[:teacher].nil?
@course.teachers << @teacher
redirect_to action: 'show'
end
def update
redirect_to action: 'add_teacher', course: params[:course], teacher: params[:teacher]
end
那是我的代码的一部分。我真的不知道是否存在路由问题或其他问题。我只是不明白为什么在调用函数 add_teacher 之前调用函数更新。首先我想也许 Rails 意识到我想更改现有记录,所以当更改 (@course.teachers
现在我正在使用更新功能重定向到具有正确参数的 add_teacher。 有人可以为我提供更好的解决方案或回答为什么自动调用“更新”功能以及如何正确设置路线?
非常感谢您的帮助,抱歉我的英语不好!
再见
更新: 好的,我确定他无论如何都会重定向,但我评论了它,现在他什么也没做。
我的路线如下所示:
get 'courses/add_teacher'
get 'courses/update'
resources :students, :forms, :votes, :courses, :years, :teachers
还有很多这样的
【问题讨论】:
-
你的路线是什么样子的
-
要符合 REST 模型,您应该拥有
resources :courses和其中的resources :teachers,这样您就可以将教师与课程关联起来。 -
@tadman 好的,我是否应该将函数映射到这样的路由:
post '/:courses/:teachers'?我也是路由新手^^ -
尽可能让
resources为您完成工作。 official Routing guide 有很多例子可供参考。避免使用手工编码的get和post路由,除非没有其他方法可以获得您想要的结果。如果/courses/:course_id/teachers是可接受的 URL,则没有理由覆盖。
标签: ruby-on-rails ruby-on-rails-3 has-and-belongs-to-many