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

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

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

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

Q&A

解決済

2回答

158閲覧

指定した時間後に非表示にする

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

0グッド

1クリップ

投稿2018/02/11 09:23

編集2018/02/14 11:33

タイトル通りですが画像を指定した時間だけ表示させたいです。

例、商品に新着っていう画像を3日だけつけたいです。

def index @productc = Product.all end def new @product = Product.new end def create @product = Product.new(product_params) @product.user_id = current_user.id @product.save redirect_to products_path end
def index @productc = Product.all end

現状こんな感じなのですがNoMethodError in Products#indexと出てしまいます。
どうしたら良いでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

Railsでの実装方法の話ですかね?
であれば、いろいろとやり方あると思いますが、imageテーブルが仮にあるとして

rb

1# これは参考情報です 2=> #<Image:0x00007fe2a605b191 3 "id": 201, 4 "filename": "gazou-100maime", 5 "created_at": "2018-01-20 00:00:20", 6 "updated_at": ... 7 8 9# 下記は適宜質問者様の都合の良いModelに読み替えてください 10# 今回の件で言えば、Product Model 11class Image 12 def is_new 13 (3.days.ago..Time.current).cover?(Time.parse(self.created_at)) 14 end 15end

このis_newをあとはview側で呼び出してあげるだけです

追記

修正前:

rb

1<% @products.each do |product| %> 2<div class="col-xs-12"> 3<%= attachment_image_tag product, :image , class: "product_image" %> 4</div> 5<% end %>

修正後:

rb

1<% @products.each do |product| %> 2 <div class="col-xs-12"> 3 <% if product.is_new %> 4 <%= image_tag 'NEW' %> 5 <% end %> 6 <%= attachment_image_tag product, :image , class: "product_image" %> 7 </div> 8<% end %>

投稿2018/02/11 15:46

編集2018/02/14 04:48
orange-lion

総合スコア426

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

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

退会済みユーザー

退会済みユーザー

2018/02/12 02:00

詳しい説明ありがとうございます。 現状のテーブルはプロダクトテーブルに商品イメージがあり、その商品イメージに対して新着というイメージ付けて、それの新着イメージを投稿から3日後に消したいのですが可能ですか?
orange-lion

2018/02/12 07:01

newという画像をつけるかつけないかの判定を行いたいわけですよね? 上記のようなis_newを使って、そのis_newに対してcssの `display: block` 、 `display: none` を判定するだけですので、可能です テーブルに対して物理削除したい、という話であった場合はDBに対しての書き込み回数が多くなってしまうのでやめましょう
退会済みユーザー

退会済みユーザー

2018/02/13 13:26

申し訳ありませんが、全くわからなくてどうしていいのかわかりません。 コードを記述しますのでどうしたら良いか教えていただけませんか?
退会済みユーザー

退会済みユーザー

2018/02/13 13:37

追加しましたのでお時間がある時にお願いします。
orange-lion

2018/02/13 18:16

追記しましたので、どうぞ 多分これで動くかと
退会済みユーザー

退会済みユーザー

2018/02/14 11:33 編集

NoMethodError in Products#indexと出てしまってうまくいきません。
orange-lion

2018/02/14 04:48 編集

> まだ理解できていないのがNEW画像はどのようにして呼び出しているのでしょうか? > is_newで時間指定をしているのは理解できるのですがこの書き方ですと商品の画像に対して3日後に消えるのかなという解釈をしてしまっています。 あ、ごめんなさい ``` <% @products.each do |product| %> <div class="col-xs-12"> <% if product.is_new %> <%= image_tag 'NEW.png' %>  newの画像 <% end %> <%= attachment_image_tag product, :image , class: "product_image" %> 商品画像 </div> <% end %> ``` であってます > => #<Image:0x00007fe2a605b191 > "id": 201, > "filename": "gazou-100maime", > "created_at": "2018-01-20 00:00:20", > "updated_at": ... > この辺もよく理解できていません。 これは何というかImageObjectの中身です (あくまで参考程度に、という意味で書いてありました) ProductのModelに置き換えてください 何をそもそもeachさせているのか意識してください そうすればどこにメソッドを生やすべきか見えてくると思います あとちょっと気になったんですけどrubyを使う上でpryやirbを使った事なかったりしますか? 多分これらはrubyを扱う上では最も最重要です
退会済みユーザー

退会済みユーザー

2018/02/14 07:06

ひとまず完成できましたがto_sを入れたりと少し手こずりました。
guest

0

保存してある日付を比較してください
https://qiita.com/mmmm/items/efda48f1ac0267c95c29

投稿2018/02/11 15:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/02/12 02:15

放りっぱなしになってしまいますがどのようなコードできるかがわからないので教えていただけると助かります
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問