前提・実現したいこと
入力したモデルを保存したいです
cocoonを使っています。
エラー・困っていること
保存したいのですが、def create
を通過してしまいます。
また、 binding.pry
も入れていたのですが、def create
に行ってくれないため止まってくれません。
ソースコード
コントローラー
Ruby
1class ItemsController < ApplicationController 2 before_action :set_article, only:[:new, :show, :edit, :update, :destroy] 3 4 def index 5 end 6 7 def new 8 if user_signed_in? 9 else 10 flash[:alert] = "ログインしてください。" 11 redirect_to article_path(id: @article.id) 12 end 13 end 14 15 def create 16 if @article.save 17 flash[:success] = "アイテムが追加されました!" 18 redirect_to new_item_path(id: @item.article_id) 19 else 20 flash[:alert] = "アイテムの追加に失敗しました。" 21 redirect_to new_item_path(id: @item.article_id) 22 end 23 end 24 25 def destroy 26 end 27 28 private 29 30 def set_article 31 @article = Article.find(params[:id]) 32 end 33 34 def create_params 35 params.require(:article).permit(:name, :content, :image, :user_id, items_attributes: [:id, :name, :image]) 36 end 37 38 def correct_user 39 @item = current_user.items.find_by(id: params[:id]) 40 redirect_to root_url if @item.nil? 41 end 42end
モデル
Ruby
1class Item < ApplicationRecord 2 belongs_to :article, optional: true 3end
ビュー
<form> <h2アイテムを追加する</h2> <%= form_for(@article) do |f| %> <%= f.fields_for :items do |i| %> <div class="item"> <%= i.hidden_field :article_id, value: @article.id %> <div class="field"> <label>アイテム名</label> <%= i.text_field :name %> </div> <div class="field file-field"> <label>画像</label> <%= i.file_field :image, :type => "file" %> </div> </div> <% end %> <div class="add-form"> <%= link_to_add_association '追加する', f, :items, partial: 'shared/add_form' %> </div> <div class="form-btn"> <%= f.submit "アイテムを追加する" %> </div> <% end %> </form>
Articleコントローラー
Ruby
1class ArticlesController < ApplicationController 2 include SetupOgbImage 3 4 before_action :set_article, only:[:show, :edit, :update, :destroy] 5 before_action :correct_user, only: [:edit] 6 7 def index 8 end 9 10 def new 11 if user_signed_in? 12 @article = current_user.articles.build 13 else 14 flash[:alert] = "ログインしてください。" 15 redirect_to root_path 16 end 17 end 18 19 def create 20 @article = current_user.articles.create(create_params) 21 if @article.save 22 flash[:success] = "記事が作成されました!" 23 redirect_to article_path(id: @article.id) 24 else 25 flash[:alert] = "記事の作成に失敗しました。" 26 redirect_to new_article_path 27 end 28 end 29 30 def show 31 @item = @article.items.all 32 end 33 34 def edit 35 end 36 37 def update 38 end 39 40 def destroy 41 end 42 43 private 44 45 def set_article 46 @article = Article.find(params[:id]) 47 end 48 49 def create_params 50 params.require(:article).permit(:name, :content, :image, :user_id, items_attributes: [:id, :name, :image]) 51 end 52 53 def correct_user 54 @article = current_user.articles.find_by(id: params[:id]) 55 redirect_to root_url if @article.nil? 56 end 57end
回答2件
あなたの回答
tips
プレビュー