【Rails】背景色・色・フォントなどランダムに投稿


はじめに

本記事では
RubyのSampleメソッドを用いて実装を行なっています

下準備

興味のない方は飛ばしてOK
以下をコピペしていきましょう〜!

terminal
rails new sample
rails db:create  
rails g model Example body:string
rails db:migrate
rails g controller examples
code .
config/routes.rb
  resources :examples
  root 'examples#index'
app/controllers
    def index
        @examples = Example.all
        @example = Example.new
    end
    def create
        example = Example.new(example_params)
        if example.save
            redirect_to :action => "index"
        end
    end
    private
    def example_params
        params.require(:example).permit(:body)
    end

続いてindex.html.erbというファイルをapp/views/examplesに作成し、以下をコピペします

app/views/examples/index.html.erb
<%= form_for @example do |f| %>
    <%= f.label :body %>
    <%= f.text_field :body , :size => 140 %>
    <br>
    <%= f.submit "exampleする" %>
<% end %>

<div class="examples-container">
    <% @examples.each do |t| %>
    <div class="example">
        <%= t.body %>
    </div>
<% end %>

sampleコード

一度試してみましょう

app/views/examples/index.html.erb
<%= form_for @example do |f| %>
    <%= f.label :body %>
    <%= f.text_field :body , :size => 140 %>
    <br>
    <%= f.submit "exampleする" %>
<% end %>

<!-- 追記箇所 -->
<% colors = %w|#51617A #5A9AFB #A6C8FA #2C4B7A #839EC7| %>
<!-- 追記箇所 -->
<div class="examples-container">
    <% @examples.each do |t| %>
    <!-- 追記箇所 -->
    <%= content_tag :div, style: "background-color: #{colors.sample}" do %>
    <div class="example">
        <%= t.body %>
    </div>
    <% end %>
    <!-- 追記箇所 -->
<% end %>

ここで追記した以下の部分について解説をします。

<% colors = %w|#51617A #5A9AFB #A6C8FA #2C4B7A #839EC7| %>
<div class="examples-container">
    <% @examples.each do |t| %>
    <%= content_tag :div, style: "background-color: #{colors.sample}" do %>
    <div class="example">
        <%= t.body %>
    </div>
    <% end %>
<% end %>

まず

<% colors = %w|#51617A #5A9AFB #A6C8FA #2C4B7A #839EC7| %>

の部分ではcolorsという名前の配列を作っています!
%wとすることで、colorsの中身が配列の形で

["#51617A", "#5A9AFB", "#A6C8FA","#2C4B7A","#839EC7"]

となります。
その後

<%= content_tag :div, style: "background-color: #{colors.sample}" do %>

#{colors.sample}とすることで背景色が先ほどの配列の中から一つ選ばれます!

sampleメソッドとは

sampleメソッドとは、Rubyの言語でランダムで配列から要素をひとつ選択して返すメソッドです。
例えば

array = [1,2,3,4,5,6,7]

とした上で

array.sample

とすることで1~7までの数値からランダムで1つ選択されます!

これを使って応用してみましょう!

応用編

<% colors = %w|#51617A #5A9AFB #A6C8FA #2C4B7A #839EC7| %>
+ <% widthes = %w|10em 20em 30em| %>
<div class="examples-container">
    <% @examples.each do |t| %>
+ <%= content_tag :div, style: "background-color: #{colors.sample};width:#{widthes.sample};height:#{widthes.sample}" do %>
    <div class="example">
        <%= t.body %>
    </div>
    <% end %>
<% end %>

とすると縦・横の幅が10em・20em・30emの中から任意に取られます!
面白いですね!

終わりに

この機能で色々なことができると思います!背景写真をランダムに変えたり、投稿画面を色鮮やかにしたりなどなど!
プロダクトはあなたの思い通りに
GeekSalonWebメンターいとじゅんがお送りしました!