#前提・実現したいこと
2度目の質問させていただきます。
情報不足もあるかと思いますが、何卒宜しく御願い致します。
####制作物:
タスク管理アプリ
####環境:
macOS Catalina ver10.15.3 、 rails (~> 5.2.3) 、 ruby 2.6.3p62
####制作物仕様:
- 個人で個人情報の編集、削除可能。
- グループの作成可能。
- グループでタスク作成可能。
####現状:
個人、グループ、どちらもタスクの作成画面までは、出力できている。
グループでタスク作成できる(createアクションが機能している)が、個人でタスクの作成ができない。
####目標:
グループに所属していなくても、タスクを作成できる様にしたい。
createアクション内の記述方法次第かと考えてます。
発生している問題・エラーメッセージ
taskのコントローラーのcreateアクション記述方法次第で、目標達成できると仮説しております。
該当のソースコード
createアクションについては、試行錯誤しております。見にくく申し訳ありません。
task_controller.rb
task_controller.rb
1 2class TaskController < ApplicationController 3 4 before_action :set_task, only: [:edit, :update, :destroy] 5 6 def index 7 @group = Group.find_by(id: params[:group_id]) 8 end 9 10 def new 11 @group = Group.find_by(id: params[:group_id]) 12 @task = Task.new 13 end 14 15 def create 16 @group = Group.find_by(id: params[:group_id]) 17 @task = @group.tasks.new(task_params) 18 # @task = Task.new(task_params) 19 # if @group_id.present? 20 # @group = Group.find_by(id: params[:group_id]) 21 # @group.tasks.save 22 # redirect_to group_task_index_path(@group) 23 # elsif 24 if @task.save 25 redirect_to group_task_index_path(@group) 26 else 27 render :new 28 end 29 end 30 31 def edit 32 @group = Group.find_by(id: params[:group_id]) 33 end 34 35 def update 36 if @task.update_attributes(task_params) 37 redirect_to :root 38 else 39 render :edit 40 end 41 end 42 43 def destroy 44 @task.destroy 45 redirect_to :root 46 end 47 48 49 50 private 51 def task_params 52 params.require(:task).permit(:title).merge(user_id: current_user.id) 53 end 54 55 def set_task 56 @task = Task.find_by(id: params[:id]) 57 end 58end
###newアクションについて
こちらでご対応いただき、newアクションについては目標物に近づけることができました。ありがとうございました。
###最後に
必要な情報等ございましたら、ご教授頂けますと幸いです。
以上、お手数ですが、何卒ご教授の程宜しく御願い致します。
#追記1
###grop の場合と 個人の場合で createに渡ってくる情報が各々どうなのか、というデータ
以下、task_controller内のcreateアクションにてbinding.pryを追記しました。
group_idの有無で条件分岐を試みてます。
task_controller.rb
1class TaskController < ApplicationController 2 3 before_action :set_task, only: [:edit, :update, :destroy] 4 5 def index 6 @group = Group.find_by(id: params[:group_id]) 7 end 8 9 def new 10 @group = Group.find_by(id: params[:group_id]) 11 @task = Task.new 12 end 13 14 def create 15 binding.pry 16 if @group = Group.find_by(id: params[:group_id]) 17 @task = @group.tasks.new(task_params) 18 else 19 @task = Task.new(task_params) 20 end 21 if @task.save 22 redirect_to group_task_index_path(@group) 23 else 24 render :new 25 end 26 end 27 28 def edit 29 @group = Group.find_by(id: params[:group_id]) 30 end 31 32 def update 33 if @task.update_attributes(task_params) 34 redirect_to :root 35 else 36 render :edit 37 end 38 end 39 40 def destroy 41 @task.destroy 42 redirect_to :root 43 end 44 45 46 47 private 48 def task_params 49 params.require(:task).permit(:title).merge(user_id: current_user.id) 50 end 51 52 def set_task 53 @task = Task.find_by(id: params[:id]) 54 end 55end 56
###個人でタスクを新規作成
実際のビュー
binding.pry後、ターミナルの画面
###グループでタスクを新規作成
実際のビュー
binding.pry後、ターミナルの画面
###タスクの新規作成のコード(個人とグループでviewが異なる様に、条件分岐を用いております。)
app/views/task/new.html.erb
1<% - if @group.present?%> 2 <header class="header2"> 3 <nav class="nav2"> 4 <ul class="header_menu2"> 5 <li class="nav-link"> 6 <%= @group.name %> 7 </li> 8 <ul class="header_menu2_inner2"> 9 <li><%= link_to "Create Group Tasks", new_group_task_path(@group), class: "nav-link listNew2", method: :get %></li> 10 <li><%= link_to "Edit Group",edit_group_path(@group), class: "nav-link listNew3", method: :get %></li> 11 </ul> 12 </ul> 13 </nav> 14 </header> 15 <div class="tasknewPage"> 16 <div class="container"> 17 <%= form_with model: @task, url: { action: :create }, class: "new_task", local: true do |f| %> 18 <%= f.label :title %> 19 <%= f.text_field :title, autofocus: true, class: "form-control taskName", placeholder: "タスク名" %> 20 <div class="text-center"><%= f.submit "作成", class: "submitBtn" %></div> 21 <% end %> 22 23<% else %> 24aaa 25 <%= form_with model: @tasks, url: { action: :create }, class: "new_task", local: true do |f| %> 26 <%= f.label :title %> 27 <%= f.text_field :title, autofocus: true, class: "form-control taskName", placeholder: "タスク名" %> 28 <div class="text-center"><%= f.submit "作成", class: "submitBtn" %></div> 29 <% end %> 30<% end %>
回答1件
あなたの回答
tips
プレビュー