I'm making an app using Rails. I have 4 Boolean columns in a table like below, and I want to show a message if that column is true.
class CreatePosts < ActiveRecord::Migration[5.2]
def change
create_table :posts do |t|
t.integer :user_id, null: false, default: 0
t.string :title, null: false, default: ''
t.text :description, null: true
t.boolean :tag_1, null: false, default: false
t.boolean :tag_2, null: false, default: false
t.boolean :tag_3, null: false, default: false
t.boolean :tag_4, null: false, default: false
t.timestamps
end
end
posts_controller.rb
def index
@posts = Post.all
end
index.html.erb
<% @posts.each do |post| %>
<ul>
<% if post.tag_1 %>
<li><%= 'tag_name_A' %></li>
<% end %>
<% if post.tag_2 %>
<li><%= 'tag_name_B' %></li>
<% end %>
<% if post.tag_3 %>
<li><%= 'tag_name_C' %></li>
<% end %>
<% if post.tag_4 %>
<li><%= 'tag_name_D' %></li>
<% end %>
<% if !post.tag_1 && !post.tag_2 && !post.tag_3 && !post.tag_4 %>
<li>none</li>
<% end %>
</ul>
<% end %>
tag_name_A
will be shown if tag_1
is the only true column, and there'll be 'tag_name_B' & 'tag_name_D' shown if tag_2
and tag_4
are both true. (I hope I'm making myself clear.)
This code is working fine and I'm already getting what I want, but I just don't like how they are written. It looks messy and obviously not smart. How would you optimize it?