前提・実現したいこと
ruby on railsでYahoo!知恵袋のようなシステムを作っています。
記事検索機能を実装中に以下のエラーが発生しました。
原因と解決策をご教示お願いいたします。
発生している問題・エラーメッセージ
・ edit_post_path(@post.id)にてPost全体(:solvedを除く)をupdateアクションで定義 ・ post_path(@post.id)にてPost[:solved]のみupdateアクションで定義 しており、current_page?()のヘルパーメソッドを用いて、 表示しているパスでupdateアクション内を条件分岐しようと試みたが、条件分岐の指定がうまくいかず、else以降の処理のみ実行される。 正しい現在ビューを表示しているパスの指定がしたい
該当のソースコード
models/post.rb
class Post < ApplicationRecord attr_accessor :keyword has_many :comments belongs_to :user validates :solved, inclusion: {in: [true, false]} def update_solved_true self.solved = true if self.solved == false self.save end
views/posts/show.html.haml
.contents .postElement - if @post.industry? 希望業界: = @post.industry - if @post.hopejob? 希望職種: = @post.hopejob - if @post.nowjob? 現職: = @post.nowjob .content__upper__right__status - if @post.solved? .content__upper__right__status-solved 解決済 - else .content__upper__right__status-unsolved 受付中 .content__upper__right__status-date = @post.created_at.strftime("%Y/%m/%d(%a) %H:%M") .postAuthor = @post.user.name - if user_signed_in? && current_user.id == @post.user_id && @comments.empty? && !@post.solved? .postManage = link_to "編集", edit_post_path(@post.id), class: "postManage__edit" -# edit_post_pathへ遷移するリンクです = link_to "削除", post_path(@post.id), method: :delete, data: { confirm: '削除しますか?' }, class: "postManage__delete" %p.postText = @post.text .container - if @post.solved? .content__upper__right__status-solved 解決済 %br .content__upper__right__status-date = @post.updated_at.strftime("%Y/%m/%d(%a) %H:%M") - else .content__upper__right__status-unsolved 受付中 %br - if current_user.id == @post.user_id = link_to "解決済にする", post_path(@post), method: :patch, class: :form__btn__solved -# post[:solved]をfalseからtrueへ変えるリンクです
views/posts/edit.html.haml
.contents .content__title 自己PRの編集 = form_for @post, html: {class: 'form'} do |f| = f.text_field :industry, placeholder: :希望業界, class: :form__element = f.text_field :hopejob, placeholder: :希望職種, class: :form__element = f.text_field :nowjob, placeholder: :現職, class: :form__element = f.text_area :text, placeholder: :自己PR本文, class: :form__text = f.submit '投稿する', class: :form__btn, data: { confirm: '編集完了しますか?' }
controllers/posts_controller.rb
class PostsController < ApplicationController include ActionView::Helpers::UrlHelper before_action :set_post, only: [:edit, :show] def index @post = Post.new @posts = Post.includes(:user).paginate(params).recent end def show end def edit end 〜〜 (中略) 〜〜 def update # 問題が発生しているupdateアクションです @post = Post.find(params[:id]) if current_page?(post_path(@post.id)) @post.update_solved_true redirect_to post_path(@post.id) else post = Post.find(params[:id]) post.update(post_params) redirect_to post_path(post.id) end end private def post_params params.require(:post).permit(:industry,:hopejob ,:nowjob, :text, :solved).merge(user_id: current_user.id) end def set_post @post = Post.find(params[:id]) end end
2019XXXXXXXXXX_create_posts.rb
migrationfile
1class CreatePosts < ActiveRecord::Migration[5.0] 2 def change 3 create_table :posts do |t| 4 t.string :industry 5 t.string :hopejob 6 t.string :nowjob 7 t.text :text, null: false, :limit => 16777215 8 t.references :user, foreign_key: true 9 t.boolean :solved, default: false, null: false 10 t.timestamps 11 end 12 end 13end
config/routes
Rails.application.routes.draw do devise_for :users root "posts#index" namespace :posts do resources :searches, only: :index end resources :posts do resources :comments, only: :create end end
補足情報(FW/ツールのバージョンなど)
Rails 5.0.7.2
form_forメソッドを使用しています。
また、以下サイトを参考にUrlHelper
をcontroller 2行目
に利用しましたが、うまく実装できませんでした。
[Rails] Controllerで表示してるページのパスを判定したい
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/15 09:31