自分のリソースの URL を短縮することを目的とした Rails プロジェクトでは、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
ます。
- 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。
問題は次のとおりです。この種のルートでは、それが機能するフォームを持つ正しい方法ですか?
ありがとうございます。
ジョルジオ