投稿用のモデル、テーブルの作成
コマンドライン
$ rails g model Tweet body:string user_id:integer
$ rails db:migrate
投稿用のコントローラーの作成
コマンドライン
$ rails g controller Tweets index new create show edit destroy
ルーティングの設定
config/routes.rb
resources :users do
resources :tweets, only: [:new,:create]
end
get "tweets/index"
ユーザーモデルとツイートモデルを紐付ける
app/models/users.rb
has_many :tweets
app/models/tweets.rb
belongs_to :user
新規投稿用のビューを作成
app/views/tweets/new.html.erb
<h3 class="page-header">今日の出来事をつぶやこう</h3>
<%= form_for([@user, @user.tweets.build]) do |f| %>
<p><%= f.label :body,"投稿内容" %></p>
<p><%= f.text_area :body %></p>
<p><%= f.submit "投稿", class: "btn btn-primary" %></p>
<% end %>
投稿一覧用のビューを作成
app/views/tweets/index.html.erb
<h3 class="page-header">ツイート一覧</h3>
<ul class="list-group">
<% @tweet.each do |tweet| %>
<li class="list-group-item">
<span class="badge text-danger"><%= link_to "[削除]",tweets_destroy_path,method: :delete %></span>
<%= tweet.body %>
</li>
<% end %>
</ul>
tweetコントローラーの設定
app/controllers/tweets_controller.rb
class TweetsController < ApplicationController
def index
@tweet = Tweet.all
end
def new
@user = User.find(params[:user_id])
end
def create
@user = User.find(params[:user_id])
@user.tweets.create(tweet_params)
redirect_to tweets_index_path
end
def destroy
@tweet = Tweet.find(params[:id])
if @tweet.destroy
redirect_to "/",flash: {danger: "投稿を削除しました"}
end
end
private
def tweet_params
params.require(:tweet).permit(:body)
end
ブラウザで投稿機能の確認