LoginSignup
4
5

More than 5 years have passed since last update.

railsで続きを読みたかったら会員登録の実装

Last updated at Posted at 2015-10-19

はじめに

続きを読みたかったら無料会員登録してねってよくある感じの機能を実装したいと思い、試行錯誤してやりました。初心者が試行錯誤した感じなのでもっといいやり方があるよって方はぜひコメントください。

データの構成

Articleモデルに、紐づいて、Itemモデルが多数あります。見出しと本文はItemモデルに入れるようになっています。

article.rb
#  title                 :string(255)
class Article < ActiveRecord::Base
  has_many :items
end
item.rb
# head                 :string(255)
# body                 :text
class Item < ActiveRecord::Base
  belongs_to :article
end

続きを読みたかったら登録してねの実装

ユーザーがログインしているかどうかはdeviseで実装しています。

/articles/show.html.erb
<% if user_signed_in? %>
  <%= render "_article" %>
<% else %>
  <%= render "_require_login" %>
<% end %>
_require_login.html.erb
<% num = 0 %>
<% @article.items.each do |item| %>
  <% num = num + item.body.size %>
  <% if num < 400 %>
    <h2><%= item.head %></h2>
    <div><%= item.body %></div>
  <% elsif num - item.body.size < 400 %>
    <h2><%= item.head %></h2>
    <div><%= truncate(item.body), length: 400 - (num - item.body) %></div>
  <% end %>
<% end %>

<% if num > 400 %>
  <% link_to "無料会員登録して続きを読む", hoge_path %>
<% end %>

文字数をカウントするために、viewでnum = 0を定義しました。その上で、numが400文字までは普通に表示します。

始めに400文字をオーバーしてしまう段落については、見出しと400文字未満までの文字をtruncateで見せてあげます。

その後400文字以上の部分については会員登録して読んでねとリンクを貼ってあげて終了です。続きを読む部分を曇りガラス的にぼかすCSSについてはこちらのページを参考にしました。

CSS3で画像の一部をiOS(曇りガラス)風にぼかす方法:レスポンシブ対応

最後に

何だかviewにロジックをゴリゴリ書く感じがあんまりよくないなーと思いながらも実装できたのでよしとしようかと思っています。もっといいやり方があれば指摘していただけるとうれしいです!

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5