スキップしてメイン コンテンツに移動

CheckListApp#6 チェック項目の作成フォーム

チェック項目の追加フォームを作ります。やっとだ。作るのは、newメソッドとcreatenewで作ったデータを元にcreateでセーブするイメージでしょうか。

まずは、チェック項目の一覧(app/views/checks/index.html.erb)にnewメソッドへのリンクを貼ります。

<h1>
    Checks
    <%= link_to image_tag('icon_plus_alt2.png',size: '25x25'), new_check_path %>
</h1>

タイトルの横に+ボタンを配置してみました。
次は、コントローラ/app/controllers/checks_controller.rbnewメソッドを作っていきます。

def new
    @check = Check.new  
end

ここはこれだけ。で、呼び出されるビューapp/views/checks/new.html.erbを作っていきます。ここでは、チェック項目の内容を登録するフォームを作ります。

<h1>Create Check Item</h1>
<%= form_for @check do |c| %>
    <p>
        <%=c.label :title %>
        <%=c.text_field :title %>
    </p>
    <p>
        <%=c.label :contents %>
        <%=c.text_area :contents %>
    </p>
    <p>
        <%= c.submit %>
    </p>
<% end %>

で、最後にcreateメソッドの作成。

def create
    @check = Check.new(check_params)
    @check.save
    redirect_to checks_path
end

private
    def check_params
        params[:check].permit(:title, :contents)
    end

プライベート関数check_paramsで、セットする値のチェックをpermitでしています。セキュアなプログラミングにするために、こういう事をするらしいですね。テストも作らなきゃ…。

とりあえず、これでチェック項目の追加が完成!

やってみると、コンテンツの改行が抜けてしまった・・・。
どうしたら良い?

textarea で入力した改行を表示させる

チェック項目詳細表示のビューapp/views/checks/show.html.erbにて、コンテンツを表示するときに文字列をsimple_formatで囲みます。

<h1><%= @check.title %></h1>
<p><%= simple_format(@check.contents) %></p>

これで、改行も表示されました。よしよし、大分できてきた気がする!
気のせいじゃありません様に。。


参考

コメント

Amazon Affiliate