前提・実現したいこと
こんにちは。
Ruby on Railsで、Task管理アプリを作成しています。
新しいTaskを保存する際に、2種類の外部キーも含めて保存をしたいのですが、片方だけ取得することができません。
(具体的には、project_idは取得できるが、user_idが取得できない)
エラーは保存する際に起きています。
初学者な為、不足情報ありましたらご指摘いただけますと幸いです。
よろしくお願い致します。
発生している問題・エラーメッセージ
ActiveModel::UnknownAttributeError in TasksController#create unknown attribute 'user_ids' for Task. Extracted source (around line #13): 12 def create 13 @task = @project.tasks.new(task_params) 14 if @task.save 15 redirect_to project_tasks_path(@project) 16 else 17 render :new 18 end 19 end Rails.root: /Users/○○○/project/cons_app Application Trace | Framework Trace | Full Trace app/controllers/tasks_controller.rb:13:in `create' Request Parameters: {"utf8"=>"✓", "authenticity_token"=>"e5COBFWH5xDEo+6haJQ4FiXO6+pPPpFCO5QzyeCkw/KHLVWSOjNloFokAMojaeV6qMo/FSjYa1fi7n7C90mhSA==", "task"=>{"title"=>"test", "description"=>"test", "start(1i)"=>"2019", "start(2i)"=>"1", "start(3i)"=>"1", "end(1i)"=>"2020", "end(2i)"=>"2", "end(3i)"=>"2", "taskId"=>"1", "user_ids"=>["10"]}, "commit"=>"Create Task", "project_id"=>"11"} Toggle session dump Toggle env dump Response Headers: None
該当のソースコード
ruby
1【controllers/tasks_controller.rb】 2 3class TasksController < ApplicationController 4 before_action :set_project, only: [:new, :create] 5 6 def index 7 @tasks = Task.all 8 end 9 10 def new 11 @task = Task.new 12 end 13 14 def create 15 @task = @project.tasks.new(task_params) 16 if @task.save 17 redirect_to project_tasks_path(@project) 18 else 19 render :new 20 end 21 end 22 23 private 24 def task_params 25 params.require(:task).permit(:title, :description, :taskId, :start, :end, user_ids:[]) 26 end 27 28 def set_project 29 @project = Project.find(params[:project_id]) 30 end 31end
ruby
1【views/tasks/new.html.erb】 2 3<select name="task[user_ids][]"> 4 <option value="">ユーザーを選んでください</option> 5 <% User.all.each do |user| %> 6 <option value=<%=user.id%>><%= user.name %></option> 7 <% end %> 8</select>
試したこと
エラーの内容の通り、Taskオブジェクトの中に'use_ids'が見つからないと言うことから
1)View内のフォームの、該当のname属性を
'user_ids'→'user_id'に修正
2)Controller内の、ストロングパラメータの記述を
'user_ids:[]'→'user_id:[]'に修正
結果user_id情報が取得できませんでした。
補足情報(FW/ツールのバージョンなど)
Rails 5.2.4.3
ruby 2.6.5p114
テーブル設計
user テーブル
Column | Type | Options |
---|---|---|
name | string | null: false |
string | null: false | |
password | string | null: false |
occupationId | integer | null: false |
Association
- has_many :user_projects
- has_many :projects, through: :user_projects
- has_many :messages
- has_many :tasks
project テーブル
Column | Type | Options |
---|---|---|
name | string | null: false |
description | text | null: false |
postcode | string | null: false |
prefectureId | integer | null: false |
city | string | null: false |
block | string | null: false |
building | string | |
start | date | null: false |
end | date | null: false |
Association
- has_many :user_projects
- has_many :users, through: :user_projects
- has_many :messages
- has_many :tasks
user_project テーブル
Column | Type | Options |
---|---|---|
user | references | null: false, foreign_key: true |
project | references | null: false, foreign_key: true |
Association
- belongs_to :user
- belongs_to :project
messages テーブル
Column | Type | Options |
---|---|---|
content | string | |
user | references | null: false, foreign_key: true |
project | references | null: false, foreign_key: true |
Association
- belongs_to :user
- belongs_to :project
task テーブル
Column | Type | Options |
---|---|---|
title | string | null: false |
description | text | null: false |
taskId | integer | null: false |
start | date | null: false |
end | date | null: false |
user | references | null: false, foreign_key: true |
project | references | null: false, foreign_key: true |
Association
- belongs_to :user
- belongs_to :project
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/27 23:58