【发布时间】:2011-10-06 08:32:08
【问题描述】:
我必须在一页(设置)上为多个表格制作编辑/创建表单。因此我创建了 SettingsController。
路线:
resources :settings, :only => :index do
member do
get 'cs_edit'
put 'cs_update'
post 'cs_create'
delete 'cs_destroy'
end
end
控制器:
class SettingsController < ApplicationController
before_filter :authenticate
...
def cs_create
@cs = CaseStatus.find(params[:id])
@cs.save
redirect_to settings_path, :notice => 'Case Status was created successfully'
end
视图部分:
<%= form_for(@cs, :url => url_for(:action => 'cs_create', :controller => 'settings'), :class => 'status_form') do |cs_f| %>
问题是我收到以下错误:
Showing /home/michael/public_html/development/fbtracker/app/views/settings/index.html.erb where line #98 raised:
No route matches {:action=>"cs_create", :controller=>"settings"}
Extracted source (around line #98):
95: <% end %>
96: </table>
97:
98: <%= form_for(@cs, :url => url_for(:action => 'cs_create', :controller => 'settings'), :class => 'status_form') do |cs_f| %>
99: <%= cs_f.text_field :name, :class => 'sname' %>
100: <%= cs_f.text_field :owt, :class => 'owt' %>
101: <%= cs_f.submit 'Add' %>
我也刚刚检查了路线:
$ rake routes
...
cs_edit_setting GET /settings/:id/cs_edit(.:format) {:action=>"cs_edit", :controller=>"settings"}
cs_update_setting PUT /settings/:id/cs_update(.:format) {:action=>"cs_update", :controller=>"settings"}
cs_create_setting POST /settings/:id/cs_create(.:format) {:action=>"cs_create", :controller=>"settings"}
cs_destroy_setting DELETE /settings/:id/cs_destroy(.:format) {:action=>"cs_destroy", :controller=>"settings"}
settings GET /settings(.:format) {:action=>"index", :controller=>"settings"}
如你所见,路由匹配 {:action=>"cs_create", :controller=>"settings"} 是存在的。但是 url_for 找不到这条路线。为什么?
【问题讨论】:
-
我相信有一种更优雅的(rails 的)方式来构造 form_for 而不使用
url_for方法。 -
怎么做? :) 对不起,我是 Rails 的新手。
-
form_for( @cs, cs_create_setting_path, :class => 'status_form' ) -
@Bohdan 你是想说我应该使用嵌套资源吗?即:
resources :settings { resources :case_statuses } -
为什么不使用设置控制器的默认路由和控制器名称?有两个不同的模型吗?
Setting和CaseStatus?
标签: ruby-on-rails ruby-on-rails-3.1