在我的 Rails 项目中,我的目标是缩短资源的 url,我在 routes.rb 中创建了路由:
resources :users do
resources :datas, controller: :data_defaults
end
所以我得到了命名路径:rake routes
user_datas GET /users/:user_id/datas(.:format) data_defaults#index
POST /users/:user_id/datas(.:format) data_defaults#create
new_user_data GET /users/:user_id/datas/new(.:format) data_defaults#new
edit_user_data GET /users/:user_id/datas/:id/edit(.:format) data_defaults#edit
user_data GET /users/:user_id/datas/:id(.:format) data_defaults#show
PUT /users/:user_id/datas/:id(.:format) data_defaults#update
DELETE /users/:user_id/datas/:id(.:format) data_defaults#destroy
然后我使用部分 _form.html.haml 创建新记录并编辑 data_default 记录。
在 DataDefault 控制器中,我有新的和编辑操作:
def new
@data_default = current_user.data_defaults.new
...
end
def edit
@data_default = DataDefault.find(params[:id])
end
然后在 _form 部分中,我有动作表单:
=form_for [current_user,@data_default] do
.....
此时,当我开始获取新记录或编辑 DataDefault 记录时,出现错误:
undefined method `user_data_defaults_path'
但我知道已经更改了控制器的路由,所以我将 url: 添加到form_for
但我需要为不同的新操作显式定义不同的 url 或编辑为:
- uurl = action_name == "new" ? user_datas_path(current_user, @data_default) : user_data_path(current_user, @data_default)
= form_for [current_user,@data_default] do |f|
注意: user_datas_path 和 user_data_path 用于不同的操作。
问题是:通过这种路线,这是拥有工作形式的正确方法吗?
谢谢大家。
乔治奥