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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

702閲覧

railsで投稿を管理者による承認制にしたい

rails1

総合スコア18

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

1クリップ

投稿2019/01/23 01:15

閲覧頂きまして、ありがとうございます。

railsで、ユーザーが投稿したコンテンツの表示を管理者が承認するまで非表示にしたいと考えています。

考えているやり方は、コントローラー上でcontentのカラム valid_flagがtrueでないと表示されないような命令を出したいと考えています。この条件文の書き方が調べても、なかなか分からなくて困っています。

また、別のおすすめのやり方がございましたら、ご教示いただければ幸いです。

ソースコード

Ruby

1class ComtentsController < ApplicationController 2 before_action :set_content, only:[:show, :edit, :update] 3 # アクションの前にvalid_contentを起動する 4 before_action :valid_content, only: [:show, edit,:update] 5 before_action :correct_user, only:[:edit] 6 7 def new 8 if user_signed_in? 9 @content = current_user.contents.build 10 else 11 redirect_to root_path 12 end 13 end 14 15 def create 16 @content = current_user.contents.create(create_params) 17 if @content.save 18 redirect_to root_path 19 else 20 redirect_to root_path 21 end 22 end 23 24 def edit 25 end 26 27 def show 28 end 29 30 private 31 32 def valid_content 33 @content = Content.find(params[:id]) 34 end 35 36 def valid_content 37 # ここにvalid_flagがtrueでない場合しか表示しない命令を書きたい 38 end 39 40 def create_params 41 params.require(:content).permit(:id, :content, :user_id, :valid_flag) 42 end 43 44 def correct_user 45 if user_signed_in? 46 @content = current_user.contents.find_by(id: params[:id]) 47 redirect_to root_path if @content.nil? 48 else 49 redirect_to root_path 50 end 51 end 52end

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

いろいろ気になるところはあるけど、あなたのやりたいようにやるなら以下のようなかんじ。

ruby

1 def valid_content 2 unless @content.valid_flag 3 redirect_to root_path 4 end 5 end 6

redirectを403とか返すようにしてもいいと思うけど、そのあたりはまだ手をつけてなさそうなので割愛。

投稿2019/01/23 01:23

--KT--

総合スコア90

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rails1

2019/01/23 03:38

ご回答頂きまして、誠にありがとうございます。 頂いたような要件でやってみようと思います。
guest

0

「表示されない」概念の定義がよくわかりませんが…

例えば、コンテンツ一覧があって、そこでは表示されるけど、詳細を見ようとすると弾かれる…とかなら、--KT--様が先に回答なさっているように、どっかに返しちゃう手がありますね。

ほかには、詳細を見ようとすると、規定の画像が表示される…なら詳細画面に行く前にそのコンテンツのフラグをチェックしてあげておいて、だめなら規定の画像やテキストを表示してあげればいいでしょう。

そもそもコンテンツ一覧の中に、フラグがfalseなコンテンツは表示したくない!なら、一覧を表示するviewに関係するController内のメソッドで、一覧を取得する際に弾いておけばいいです。フラグがtrueな全コンテンツを20個まで取得!みたいな感じです。

ほかにもいろいろ想定できてしまうので、もう少し具体的な補足をいただけますと幸いです

投稿2019/01/23 01:49

sansansandodo

総合スコア248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rails1

2019/01/23 03:38

コメント頂きまして、ありがとうございます。 勉強不足な点失礼いたしました。今後は精査した質問ができるように心がけます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問