我是 Rails 的新手。我使用 rails 3.0.5 。
我有一个 EMPLOYEE 资源,但我想用另一个外部 Controller (emp_profile_controller) 来管理它。 这个外部 Controller (emp_profile_controller) 管理一些操作 (index, new_employee, create_employee, edit_employee, update_employee ecc..)。
这个 Controller 的路由是:
controller :emp_profile do
get 'emp_profile' => :index
get 'emp_edit_profile' => :edit_employee
put 'emp_edit_profile' => :update_employee
get 'new_employee' => :new_employee
post 'new_employee' => :create_employee
get 'emp_list' => :emp_list
end
我如何使用一种形式来处理此 Controller 中的创建和更新操作?
我试过:
form_for(@employee, :url => { :controller => "emp_profile"}) do |f|
但它不起作用。
如果我一次只管理一个操作(创建或更新),url_for 会起作用,例如:
form_for(@employee, :url => { :controller => "emp_profile", :action => "update_employee" }
但是我怎样才能用一种形式处理这两个 Action 呢?
感谢您的参与,如果我问了一个愚蠢的问题,我深表歉意。
编辑
目前,我解决了检查对象是否存在于表单文件中的问题,如果存在,我将使用 UPDATE 操作路径设置一个变量,否则,我将使用 CREATE 操作路径设置一个变量。所以在 form_for 语句中,我将 url_for 与上述变量一起使用。
<% if @employee.new_record?
action = "create_employee"
method = "post"
else
action = "update_employee"
method = "put"
end
%>
form_for(@employee, :url => { :controller => "emp_profile", :action => action }, :method => method
我认为这不是最好的方法,但它确实有效,而且我只能使用一个表单文件。
最佳答案
由于您的模型名称和 Controller 名称不同,您可以将此行添加到您的路由中
resources :employees,:controller=>"emp_profile",:path=>"emp_profile"
将create_employee、update_employee的方法名分别改为create和update。
然后如下所示更改您的 form_for
<%= form_for @employee do |f| %>
....
<% end %>
关于ruby-on-rails - 通过创建和更新操作将 Single Rails 表单管理到其他 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069589/