前提・実現したいこと
個人アプリを開発しており、コンセプトはスノボー版インスタグラムを作っています。
実現したいことは、新規投稿する時に、スノボーのカテゴリーとブランドをデータベースに登録させたいです。
なお、現状は、セレクトボックスが動的に変化できるように実装できていますが、データベースには登録できず、
コントローラーにもまだカテゴリーとブランドに関して未記入の状態です。
該当のソースコード
_form.html.haml(新規投稿のフォーム)
= form_for(@post) do |f| .field .field-label = f.label :title, "snowB" .field-input = f.text_field :title .field .field-label = f.label :appeal, "ココがポイント!" .field-input = f.text_area :appeal .field .field-label = f.label :image, "snowB写真" .field-input = f.attachment_field :image .field .field-label = f.label :category_id, "カテゴリーを選ぶ" .field-input = render "homes/select" .field-input = render "homes/sub_select" .actions = f.submit "投稿する", class: "btn"
render "homes/select"のソースコード
%label.seachBox-listname snowBを選ぶ %select.selectBoxLists{id: "parent", name: "snowB"} %option{value: "", class: "msg"} snowBを選択 %option{value: "snowboard"} ボード %option{value: "snowboots"} ブーツ %option{value: "binding"} ビンディング %option{value: "helmet"} ヘルメット %option{value: "goggle"} ゴーグル %option{value: "grove"} グローブ %option{value: "wear"} ウェア %option{value: "item"} アイテム
= render "homes/sub_select"のソースコードの一部分(長くなるため割愛)
%label.seachBox-listname ブランド %select.selectBoxLists{name: "ブランド", id: "children"} %option ブランドを選択 -# スノーボードのブランド %option{value: "BURTON", "data-val": 'snowboard'} BURTON %option{value: "K2", "data-val": 'snowboard'} K2 %option{value: "SALOMON", "data-val": 'snowboard'} SALOMON %option{value: "FLOW", "data-val": 'snowboard'} FLOW %option{value: "OGASAKA", "data-val": 'snowboard'} OGASAKA %option{value: "RIDE", "data-val": 'snowboard'} RIDE %option{value: "ROME", "data-val": 'snowboard'} ROME %option{value: "ALLIAN", "data-val": 'snowboard'} ALLIAN %option{value: "YONEX", "data-val": 'snowboard'} YONEX %option{value: "CAPiTA", "data-val": 'snowboard'} CAPiTA %option{value: "NOVEMBER", "data-val": 'snowboard'} NOVEMBER %option{value: "elan", "data-val": 'snowboard'} elan %option{value: "Artistic", "data-val": 'snowboard'} Artistic %option{value: "BC Stream", "data-val": 'snowboard'} BC Stream %option{value: "others1", "data-val": 'snowboard'} その他
postコントローラー(投稿のコントローラーです)
class PostsController < ApplicationController before_action :authenticate_user!, except: [:index] def index @posts = Post.all @categories = Category.all end def show @post = Post.find(params[:id]) @comment = Comment.new @comments = @post.comments.includes(:user) @categories = Category.all @posts = Post.where(category: @post.category_id) end def new @post = Post.new @category_parent_array = Category.where(ancestry: nil).pluck(:name) end def create @post = Post.new(post_params) @post.user_id = current_user.id @category_parent_array = Category.where(ancestry: nil).pluck(:name) if @post.save redirect_to post_path(@post), notice: '投稿されました' else render :new, alert: '投稿できませんでした' end end def edit @post = Post.find(params[:id]) if @post.user != current_user redirect_to posts_path, alert: '不正なアクセスです' end end def update @post = Post.find(params[:id]) if @post.update(post_params) redirect_to post_path(@post), notice: '投稿が更新されました' else render :edit end end def destroy post = Post.find(params[:id]) post.destroy redirect_to posts_path end private def post_params params.require(:post).permit(:title, :appeal, :image, :category_id).merge(user_id: current_user.id) end end
postのマイグレーションファイル
class CreatePosts < ActiveRecord::Migration[5.0] def change create_table :posts do |t| t.integer :user_id, null:false t.string :title, null:false t.text :appeal, null:false t.string :image_id, null:false t.integer :category_id t.timestamps end end end
かなり長期間悩んでいるため、具体的なコードと手順をご教示いただけると大変助かります。