ルーティング経由(?)のページ遷移とhttpリクエストに直接入力した場合のページ遷移(?)では動きが違うというバグが出ています。
素人が故にどのような情報をこちらに記載すれば、閲覧者様の解決のお力になるのか理解していないので、追加で必要な情報がございましたら、ご教示いただけますと幸いです。
"?"が付いている表現には、表現が適切かどうが怪しいので"?"を付けています。
開発環境
Ruby 2.3
Rails 4.2.5
やりたいこと
UUserモデル、Skillモデル、UserSkillモデルがあり、UserのMyPage内でSkillの新規登録・編集・削除
ハマっているポイント(画像参照)
トップページにあるアバターイメージをクリックすると「マイページ」と「ログアウト」がtoggleで出てきます。
「マイページ」をクリックすると「マイページ」へ遷移するのですが、スキルリストの「更新」をクリックしても何もリアクションがありません。
binding.pryをどこに設置しても引っかかりません。
(リクエストが飛んでいない?)
しかしながら、トップページで直接httpを入力して、ページ遷移すると「更新」が出来ます。binding.pryも引っかかります。
「トップページ → マイページクリックしての遷移 → マイページ → リロード」でも「更新」出来ます。
各要素(?)のコードは以下です。
application.html.erb
<ul class="dropdown-menu"> <li><%=link_to 'マイページ', user_path(current_user) %></li> <li><%=link_to 'ログアウト', destroy_user_session_path, method: :delete %></li> </ul>
users_controller.rb
class UsersController < ApplicationController before_action :set_user, only: [:show] def show @userskills = @user.user_skills end private def set_user @user = User.find(params[:id]) end end
show.html.erb
<!-- userの情報 省略 --> <div id="user_skill"> <%= render partial: "skill", locals: {user: @user} %> </div>
users/_skill.html.erb
<table class="table table-striped"> <thead> <tr> <th>No.</th> <th>スキル</th> <th>レベル</th> <th>詳細</th> <th>編集</th> <th>削除</th> </tr> </thead> <tbody> <% @userskills.each_with_index do |userskill, i| %> <tr class="skill_list_<%= i+1 %>"> <%= form_for(userskill, url: user_skill_path(userskill), html: {method: :put}) do |f| %> <td><%= i %></td> <td><%= f.select :skill_id, { :html5 => "1", :css3 => "2"} %></td> <td><%= f.select :level, { :初心者 => "1", :経験者 => "2", :プロ => "3"} %></td> <td><%= f.text_area :detail %></td> <td> <%= f.submit "更新" %> </td> <td> <%= link_to '戻る', user_path(current_user.id) %> </td> <% end %> </tr> <% end %> </tbody> </table>
user_skills_controller.rb
class UserSkillsController < ApplicationController before_action :set_skill, only: [:update] def update @params = userskill_params respond_to do |format| if @userskill.update(@params) format.html { redirect_to root_path, notice: 'UserSkill was successfully updated.' } end end end private def set_skill @userskill = UserSkill.find(params[:id]) end def userskill_params params.require(:user_skill).permit(:id, :skill_id, :level, :detail) end end
routes.rb
users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy
user_skillも同様のルーティングです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/11 05:18