質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.48%

rails 親子関係のあるモデルを同時登録するform機能について

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 750

score 1

前提・実現したいこと

railsの質問です。
親子関係のあるモデルを同時登録するformを作っています。
親category 子video
難しいところではないのですが、エラーの原因がわからず困っています。

発生している問題・エラーメッセージ

以下のエラーが出ます。

Processing by Admin::CategoriesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"7/B3xd4ZptGUf5ySZJERLADaQSDOWNvTrh68e5LIrZXwOCdIZgFFR1O3X9W+nPismVyybiTYbUKlaR1MONoFYA==", "category"=>{"title"=>"sssas", "category_type_id"=>"1", "short_description"=>"ddffh", "video"=>{"title"=>"hhgggf"}}, "commit"=>"作成"}
User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
Unpermitted parameter: :video

該当のソースコード

親のモデルコード
class Category < ApplicationRecord 
validates :title, presence: true
validates :short_description, presence: false
validates :description, presence: false

belongs_to :category_type
has_many :questionnaires
has_many :questionnaire_answers
has_many :videos
accepts_nested_attributes_for :videos

子のモデルコード
class Video < ApplicationRecord 
validates_presence_of :title
belongs_to :category
has_many :comments
has_many :progresses
has_many :video_checksheets
has_many :checksheets, through: :video_checksheets
has_one :checksheet_answer

has_attached_file :videofile
validates_attachment :videofile, content_type: { content_type: ['video/mp4'] }

has_attached_file :worksheet
has_attached_file :slide

has_attached_file :thumbnail, styles: { small: '320x320>' }
validates_attachment_content_type :thumbnail, content_type: /\Aimage\/(png|jpeg|jpg)\z/

validates :videofile, attachment_presence: true
validates :thumbnail, attachment_presence: true
validates :minutes, presence: true
validates :seconds, presence: true

validates :minutes, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
validates :seconds, numericality: { only_integer: true, greater_than_or_equal_to: 0, less_than: 60 }

コントローラ

class Admin::CategoriesController < Admin::Base
before_action :set_category, only: [:show, :edit, :update, :destroy]

def index
@categories = Category.all.order(:id)
@category_types = CategoryType.all.order(:id)
end

GET /categories/new

def new
@category = Category.new
@category.videos.build
@text = '作成'
end

GET /categories/1/edit

def edit
@text = '更新'
end

POST /categories

POST /categories.json

def create
@category = Category.new(category_params)

respond_to do |format|
if @category.save
format.html { redirect_to admin_categories_path, notice: 'Category was successfully created.' }
else
format.html { render :new }
end
end
end

def update
respond_to do |format|
if @category.update(category_params)
format.html { redirect_to admin_categories_path, notice: 'Category was successfully updated.' }
else
format.html { render :edit }
end
end
end

def destroy
@category.destroy
respond_to do |format|
format.html { redirect_to admin_categories_path, notice: 'Category was successfully destroyed.' }
end
end

private
def set_category
@category = Category.find(params[:id])
end

def category_params
params.require(:category).permit(:title, :short_description, :category_type_id,     videos_attributes: [:title])
end

end

ビュー

<%= form_with(model: [:admin, @category]) do |f| %>

<div class="field">
<%= f.label '講座名:' %>
<%= f.text_field :title %><br>
<%= f.label 'カテゴリ:' %>
<%= f.collection_select :category_type_id, CategoryType.all, :id, :title, {}, style: 'width:150px' %><br>
<%= f.label '説明' %><br>
<%= f.text_area :short_description, size: '100x5' %><br>
</div>
<h1>チャプター項目編集</h1>
<%= f.fields_for  :video do |g| %>
<div class="field">
<%= g.label 'チャプター名' %>
<%= g.text_field :title %><br>
</div>
<% end %>
<div class="actions">
<%= f.submit @text, class: "btn btn-primary" %>
</div>
<% end %>

試したこと

ここに問題に対して試したことを記載してください。
def category_params
params.require(:category).permit(:title, :short_description, :category_type_id,     videos_attributes: [:title])
end
ここの記載方法が違うのでしょうがネットで調べても、同じ記載をしています。

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • winterboum

    2020/05/23 12:00 編集

    1) それはエラーではありません。たんなるlog、経過報告です。
    2) codeがベタなので読みにくく、読む気が起きません。<code>を使って読みやすくしてください file名もわかるように。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る