railsでコンテンツ投稿機能を作成しており、画像投稿にcarrierwaveを使用しているのですが、一つ問題が発生してしまいました。
それは、投稿する際に、createアクションで、[The action 'create' could not be found for PostsController]
というエラーが発生してしまいます。
というものの、原因はわかっていて、
def create post = Post.new( post_params, user_id: @current_user.id ) post.save redirect_to("/") end
おそらく、user_idをpost_paramsの引数として設定していないからなのではと思っています(定かではない)
private def post_params params.require(:post).permit(:content, :image) end
user_idには@current_user.idを設定したいのですが、その場合のpost_paramsの処理をどうすれば良いかがわからず、困っています。ご教授願います。
post.rb
1class Post < ApplicationRecord 2 mount_uploader :image, ImageUploader 3 validates :content, {presence: true, length: {maximum: 140}} 4 validates :user_id, {presence: true} 5 6 def user 7 return User.find_by(id: self.user_id) 8 end 9 10end
route.rb
1Rails.application.routes.draw do 2 get "login" => "users#login_form" 3 post "login" => "users#login" 4 post "logout" => "users#logout" 5 6 post "users/:id/update" => "users#update" 7 get "users/:id/edit" => "users#edit" 8 post "users/create" => "users#create" 9 get "signup" => "users#new" 10 get 'users/index' => "users#index" 11 get "users/:id" => "users#show" 12 13 get "/" => "posts#index" 14 get "posts/new" => "posts#new" 15 post "posts/create" => "posts#create" 16 get "posts/:id" => "posts#show" 17 post "posts/:id/destroy" => "posts#destroy" 18 19end
new.html.erb
1<% @post = Post.new unless @post %> 2 3<div class="main posts-new"> 4 <div class="container"> 5 <h1 class="form-heading">投稿する</h1> 6 7 <div class="box2"> 8 <p>投稿本文の内容は、140文字までです。<br>本文が空の状態での投稿はできません。</p> 9</div> 10 11<%= form_for @post,:url => {:action => :create} do |f| %> 12<div class="form"> 13 <div class="form-body"> 14 <p>募集内容(最大140文字)</p> 15<%= f.text_area :content, class: "js-text" %> 16<p class="js-text-count"></p> 17 18<%= f.file_field :image %> 19<%= f.submit "投稿する" %> 20</div> 21 </div> 22<% end %> 23</div> 24</div>
class PostsController < ApplicationController before_action :authenticate_user bedore_action :ensure_correct_user, only: [:edit, :update, :destroy] def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find_by(id: params[:id]) @user = @post.user end def new @post = Post.new end def create post = Post.new( post_params, user_id: @current_user.id ) post.save redirect_to("/") end def destroy @post = Post.find_by(id: params[:id]) @post.destroy flash[:notice] = "削除...しちゃったよ" redirect_to("/") end def ensure_correct_user @post = Post.find_by(id: params[:id]) if @post.user_id != @current_user.id flash[:notice] = "権限がありません" redirect_to("/") end end private def post_params params.require(:post).permit(:content, :image) end end
回答2件
あなたの回答
tips
プレビュー