2 flat logo on transparent 256
2018-03-10

Ruby On Rails4で簡易ブログを作成する2 | editとcreateのアクションとページを作成する

Pc2121

前回はblogのcontroller、ページ、ルートを作成しました 今回はCreateとEdtiのアクションとページを作成します。

前回記事

第一回目の記事Ruby On Rails4で簡易ブログを作成する1 | VIew Controller ルートを作成する

今回対応すること

create editのページとアクションを追加します。

1:blogs_controllerへnewアクションを追加します。

class BlogsController < ApplicationController

  def index
    @blogs = Blog.all.by_publish_time
  end

  def new

  end

end

2:viewのapp/views/blogフォルダへnew.html.erbを作成

new.html.erbを新規作成し下記ソースを貼り付けます

編集ファイルpath: app/views/blog/new.html.erb

<h1>新しい記事を投稿</h1>
<%= form_for :blog, url: blogs_path do |f| %>
  <p>
    <%= f.label :title, "記事のタイトル" %><br>
    <%= f.text_field :title %>
  </p>

  <p>
    <%= f.label :text, "記事の内容" %><br>
    <%= f.text_area :text, cols: 60, rows: 8 %>
  </p>

  <p>
    <%= f.submit %>
  </p>
<% end %>

2行目の:blogはModelを指定しています。 pathはrake routeコマンドで表示されるprefixの createアクションのblogs_pathを指定します。

パスを指定する際は必ず_pathを指定する必要があります。

3:localhost:3000/blogs/newへアクセス

localhost:3000/blogs/newへアクセスすると下記ページが表示されます

new_page.png

このまま送信しても、Modelの設定がない為エラーになります。

4:Modelを作成する

Modelの新規作成や、カラム追加、削除、変更の手順は 下記2作業が必要になります。

1:マイグレーションファイルを作成

2:ファイルを実行する

まず以下コマンドを実行しマイグレーションファイルを作成する

 rails g model Blog title:string text:text

Modelは単数形で記載します。

下記ファイルが生成されます

createModel

ファイル内の先頭はファイルの生成日が表示されるので、 先頭部分は可変します。

ファイルの中身は下記のような形になります。

class CreateBlogs < ActiveRecord::Migration
  def change
    create_table :blogs do |t|
      t.string :title
      t.text :text

      t.timestamps null: false
    end
  end
end

コマンドライン上で以下を記入するとテーブル生成されます。

bundle exec rake db:migrate

5:BlogsControllerへCreateアクションを追加する

フォームで登録したデータのpost先はcontrollerのcreateになります。BlogsController のcreate actionを追加し privateメソッドへblog_paramsメソッドを追加します。

class BlogsController < ApplicationController

  def index

  end

  def new

  end

  #追加する内容1
  def create
    @blog= Blog.new(blog_params)
    @blog.save
    redirect_to blogs_path
  end

  #追加する内容2
  private
  def blog_params
    params.require(:blog).permit(:title, :text)
  end

end

blog_paramsはストロングパラメーターと呼ばれるもので、 ストロングパラメーターで許可した値のみテーブルに登録されます。 つまりテーブルへカラムを追加した場合は ストロングパラメーターへ追加したカラムを記載しないと データ登録ができません。

6:データを追加する

localhost:3000/blogs/newへアクセスし、何件かデータ登録します。

7:BlogsControllerへeditアクションを追加する

class BlogsController < ApplicationController

  def index

  end

  def new

  end

  def create
    @blog= Blog.new(blog_params)
    @blog.save
    redirect_to blogs_path
  end

  #追加する内容
  def edit
  
    @blog = Blog.find(params[:id])
  
end

  private
  def blog_params
    params.require(:blog).permit(:title, :text)
  end

end

8:editページを作成

article/view/blog/edit.html.erbを新規作成し 下記ソースを貼り付けます

<h1>記事を編集する</h1>
<%= form_for :blog, , url: blog_path, method: :patch do |f| %>
  <p>
    <%= f.label :title, "記事のタイトル" %><br>
    <%= f.text_field :title %>
  </p>

  <p>
    <%= f.label :text, "記事の内容" %><br>
    <%= f.text_area :text, cols: 60, rows: 8 %>
  </p>

  <p>
    <%= f.submit %>
  </p>
<% end %>

editページへのアクセスには個別のユニークカラム(今回の場合はシステムID)が必要になります。 次回はIndex ページからeditページへアクセスする方法を記載します

前の記事
次の記事