updated on 2018-12-08
1.
#Gemfile
...
gem 'simple_form'
$ bundle install
step2 simple_formの設定ファイルをインストール
$ rails generate simple_form:install
Simple Formにbootstrapも適用したいいとはこちら!!
$ rails generate simple_form:install --bootstrap
formを作る
# _form.html.erb <%= simple_form_for (@article) do |f| %> <% if @article.errors.any? %> <div id="error_explanation"> <h2> <%= "#{pluralize(@article.errors.count, "error")}個のエラーで保存ができません" %> </h2> <ul> <% @article.errors.full_messages.each do |msg| %> <li> <%= msg %> </li> <% end %> </ul> </div> <% end %> <div class="form-group"> <%= f.input :title, label: "タイトル" %> </div>
<div class="form-group"> <%= f.input :body, label: "内容" %> </div>
<div class="form-group"> <%= f.input :image, as: :file, class: "form-control" %> </div> <div class="form-group"> <%= f.button :submit %> </div>
formのcssを作る(自分の好きなレイアウトに)
#stylesheets/form.scss .simple_form { label { margin: 2px 10px; &.radio, &.checkbox { float: none; margin: 0; width: auto; text-align: left; } &.checkbox { display: block; } &.radio { margin-right: 10px; } } div.input { margin-bottom: 10px;} input.radio_buttons, input.check_boxes { margin-right: 5px; } .alert-error { color: #D00; margin-bottom: 10px; font-weight: bold; } .hint, .error { clear: left; font-size: 12px; color: #D00; display: block; } .hint { color: #555; font-style: italic; } }
simple_formを使えば記述は多少少なくなるけど、正直、あまり導入しなくてもいいかなって感じではある...
こっちの方が個人的には好き
#_form.html.erb <%= form_with(model: post, local: true) do |form| %> <% if post.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(post.errors.count, "error") %> 保存できません</h2> <ul> <% post.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %> <div class="field"> <%= form.label :title %> <%= form.text_field :title, class: 'form-control' %> </div> <div class="field"> <%= form.label :body %> <%= form.text_field :body, class: 'form-control' %> </div> <div class="field"> <%= form.label :image %> <%= form.file_field :image, class: 'form-control' %> </div> <div class="actions"> <%= form.submit '更新する', class: 'btn btn-block btn-success' %> </div> <% end %>
articles_controller def new @article = Article.new end def edit @article = Article.find(params[:id]) end def create @article = Article.new(article_params) if @article.save flash[:notice] = "作成に成功しました" redirect_to article_path(@article) else flash[:alert] = "エラーのより保存できませんでした" render :new end end private def article_params params.require(:article).permit(:title, :body, :image) end
new.html.erb edit.html.erb <%= render 'form', post: @article %>