前提・実現したいこと
Rails 5 でフリマサービスを開発しています。
form_forを使用して登録済みのユーザーの情報を客から出品者へと変更したいです。
しかしユーザーが登録情報の変更を行うviewにて、問題が発生しており、ご助言いただきたいです。
発生している問題・エラーメッセージ
もともとform_tagを使って機能していた部分を、form_forに書き換えた結果、特定のviewにのみ、下記のUrlGenerationErrorが発生します。
No route matches {:action=>"register_designer", :controller=>"users"}
該当のソースコード
new_designer.html.erb
ruby
1<div class="main users-new"> 2 <div class="container"> 3 <div class="form-heading">出品者として登録</div> 4 <div class="form users-form"> 5 <div class="form-body"> 6 <% @user.errors.full_messages.each do |message| %> 7 <div> 8 <%= message %> 9 </div> 10 <% end %> 11 12 <%= form_for @user, url: { :controller => :users, :action => :register_designer} do |f| %> 13 <%= f.label("デザイナー名") %> 14 <%= f.text_field :name %> 15 16 <%= f.hidden_field :user_group, :value => 2 %> 17 18 <%= f.label("アイコン") %> 19 <%= f.file_field :icon_image_name %> 20 21 <%= f.submit("登録") %> 22 <% end %> 23 24 </div> 25 </div> 26 </div> 27</div>
users_controller.rb
ruby
1 def new_designer 2 @user = @current_user 3 end 4 5 def register_designer 6 @user = User.find_by(id: params[:id]) 7 user = params.require(:user).permit( 8 :name, 9 :brand_name, 10 :icon_image_name, 11 :user_group 12 ) 13 if @user.update_attributes(user) 14 flash[:notice]="登録が完了しました" 15 redirect_to("/users/#{@user.id}") 16 else 17 render("users/new_designer") 18 end 19 end
routes.rb
ruby
1 get 'signup_designer' => "users#new_designer" 2 patch 'users/:id/register_designer' => "users#register_designer"
試したこと
<%= form_for @user, url: { :controller => :users, :action => :register_designer} do |f| %>
の部分を、<%= form_for @user, url: users_register_designer_path(@user), html: {method: "patch"} do |f| %>
などに変更して試してみましたが、解決できませんでした。
また、他のviewファイルにform_for部分をそのままコピペして試したところ、正常に機能しました。
補足情報(FW/ツールのバージョンなど)
アイコン画像の処理には、carrier waveを使用しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。