我尝试使用form_for基于代表培训课程的对象在rails 4中创建表单。在加载页面之前,应用程序会检查当前用户是否已注册该课程。如果没有,则表单上的提交按钮会创建一个新的“注册”按钮。在signups表中标记课程ID和用户ID。这可以正常工作。
如果用户已经注册,那么我希望提交按钮具有不同的功能 - 为特定注册记录发出获取请求并在屏幕上显示其详细信息。基本上就像重新注册到'注册/ id'。但这不起作用。
如果用户未注册,则显示此表单。它会在注册控制器中触发对创建操作的发布请求(并且可以正常工作):
<%= form_for course, :url => {:controller => "signups", :action => "create"}, :method => "post" do |f| %>
<%= hidden_field_tag :course_id, course.id %>
<%= f.label :"Course Title" %>
<%= f.text_field :courseTitle, class: 'form-control' %>
<%= f.label :"Course Title" %>
<%= f.text_field :courseTitle, class: 'form-control' %>
<%= f.label :"Detailed Description Of Course Dates & Times" %>
<%= f.text_area :courseDatesAndTimes, class: 'form-control' %>
<%= f.label :"General Course Location eg 'Malaga'" %>
<%= f.text_field :courseGeneralLocation, class: 'form-control' %>
<%= f.label :"Exact Course Address including Postal Code" %>
<%= f.text_field :courseExactAddress, class: 'form-control' %>
<%= f.label :"Course Description" %>
<%= f.text_area :courseDescription, class: 'form-control' %>
<%= f.label :"Maximum Number of Students" %>
<%= f.text_field :courseMaximumNumberStudents, class: 'form-control' %>
<%= f.label :"Normal Course Price" %>
<%= f.text_field :courseNormalPrice, class: 'form-control' %>
<%= f.label :"'Listener' Course Price" %>
<%= f.text_field :courseListenerPrice, class: 'form-control' %>
<%= f.submit "Sign Up!", class: "btn btn-primary" %>
<% end %>
如果用户已注册该课程,则显示此表格:
<%= form_for course, :url => {:controller => "signups", :action => "show", params: {id: course.id}}, :method => "get" do |f| %>
<%= hidden_field_tag :course_id, course.id %>
<%= hidden_field_tag :user_id, current_user.id %>
<%= f.label :"Course Title" %>
<%= f.text_field :courseTitle, class: 'form-control' %>
<%= f.label :"Course Title" %>
<%= f.text_field :courseTitle, class: 'form-control' %>
<%= f.label :"Detailed Description Of Course Dates & Times" %>
<%= f.text_area :courseDatesAndTimes, class: 'form-control' %>
<%= f.label :"General Course Location eg 'Malaga'" %>
<%= f.text_field :courseGeneralLocation, class: 'form-control' %>
<%= f.label :"Exact Course Address including Postal Code" %>
<%= f.text_field :courseExactAddress, class: 'form-control' %>
<%= f.label :"Course Description" %>
<%= f.text_area :courseDescription, class: 'form-control' %>
<%= f.label :"Maximum Number of Students" %>
<%= f.text_field :courseMaximumNumberStudents, class: 'form-control' %>
<%= f.label :"Normal Course Price" %>
<%= f.text_field :courseNormalPrice, class: 'form-control' %>
<%= f.label :"'Listener' Course Price" %>
<%= f.text_field :courseListenerPrice, class: 'form-control' %>
<%= f.submit "You're Signed Up! View Details", class: "btn btn-primary" %>
<% end %>
这不起作用 - 我收到错误:
CoursesController #index中的ActionController :: UrlGenerationError 没有路线匹配{:action =&gt;&#34; show&#34;,:controller =&gt;&#34;注册&#34;}
show action位于signups_controller中(正好在功能&#39;创建&#39;操作下方),如下所示:
def show
@courseID = params[:course_id]
@userID = current_user.id
@signup = getSignup(@courseID,@userID)
redirect_to signups(@signup)
end
...而在routes.rb文件中我只有以下一行:
resources :signups
我试图阅读有关路由的rails指南,以及form_for指导如何定制选项以正确调用不同控制器中的不同操作但我认为我缺少一些基本知识在这里,因为我无法在注册控制器中调用show动作,似乎是因为routes.rb问题。
有人能告诉我什么错吗?
感谢 - 你!
答案 0 :(得分:0)
尝试替换
<%= form_for course, :url => {:controller => "signups", :action => "show", params: {id: course.id}}, :method => "get" do |f| %>
与
<%= form_for course, url: signup_path(course) do |f| %>