diff --git a/rails-blog/app/assets/javascripts/posts.coffee b/rails-blog/app/assets/javascripts/posts.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/rails-blog/app/assets/javascripts/posts.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/rails-blog/app/assets/stylesheets/posts.scss b/rails-blog/app/assets/stylesheets/posts.scss new file mode 100644 index 0000000..ed4dfd1 --- /dev/null +++ b/rails-blog/app/assets/stylesheets/posts.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Posts controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/rails-blog/app/controllers/posts_controller.rb b/rails-blog/app/controllers/posts_controller.rb new file mode 100644 index 0000000..6ae6016 --- /dev/null +++ b/rails-blog/app/controllers/posts_controller.rb @@ -0,0 +1,74 @@ +class PostsController < ApplicationController + before_action :set_post, only: [:show, :edit, :update, :destroy] + + # GET /posts + # GET /posts.json + def index + @posts = Post.all + end + + # GET /posts/1 + # GET /posts/1.json + def show + end + + # GET /posts/new + def new + @post = Post.new + end + + # GET /posts/1/edit + def edit + end + + # POST /posts + # POST /posts.json + def create + @post = Post.new(post_params) + + respond_to do |format| + if @post.save + format.html { redirect_to @post, notice: 'Post was successfully created.' } + format.json { render :show, status: :created, location: @post } + else + format.html { render :new } + format.json { render json: @post.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /posts/1 + # PATCH/PUT /posts/1.json + def update + respond_to do |format| + if @post.update(post_params) + format.html { redirect_to @post, notice: 'Post was successfully updated.' } + format.json { render :show, status: :ok, location: @post } + else + format.html { render :edit } + format.json { render json: @post.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /posts/1 + # DELETE /posts/1.json + def destroy + @post.destroy + respond_to do |format| + format.html { redirect_to posts_url, notice: 'Post was successfully destroyed.' } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_post + @post = Post.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def post_params + params.require(:post).permit(:title, :body, :user_id) + end +end diff --git a/rails-blog/app/helpers/posts_helper.rb b/rails-blog/app/helpers/posts_helper.rb new file mode 100644 index 0000000..a7b8cec --- /dev/null +++ b/rails-blog/app/helpers/posts_helper.rb @@ -0,0 +1,2 @@ +module PostsHelper +end diff --git a/rails-blog/app/models/post.rb b/rails-blog/app/models/post.rb new file mode 100644 index 0000000..95d45da --- /dev/null +++ b/rails-blog/app/models/post.rb @@ -0,0 +1,3 @@ +class Post < ApplicationRecord + belongs_to :user +end diff --git a/rails-blog/app/views/posts/_form.html.erb b/rails-blog/app/views/posts/_form.html.erb new file mode 100644 index 0000000..6d28eb5 --- /dev/null +++ b/rails-blog/app/views/posts/_form.html.erb @@ -0,0 +1,32 @@ +<%= form_for(post) do |f| %> + <% if post.errors.any? %> +
+

<%= pluralize(post.errors.count, "error") %> prohibited this post from being saved:

+ + +
+ <% end %> + +
+ <%= f.label :title %> + <%= f.text_area :title %> +
+ +
+ <%= f.label :body %> + <%= f.text_area :body %> +
+ +
+ <%= f.label :user_id %> + <%= f.text_field :user_id %> +
+ +
+ <%= f.submit %> +
+<% end %> diff --git a/rails-blog/app/views/posts/_post.json.jbuilder b/rails-blog/app/views/posts/_post.json.jbuilder new file mode 100644 index 0000000..f74f45b --- /dev/null +++ b/rails-blog/app/views/posts/_post.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! post, :id, :title, :body, :user_id, :created_at, :updated_at +json.url post_url(post, format: :json) diff --git a/rails-blog/app/views/posts/edit.html.erb b/rails-blog/app/views/posts/edit.html.erb new file mode 100644 index 0000000..ded33f7 --- /dev/null +++ b/rails-blog/app/views/posts/edit.html.erb @@ -0,0 +1,6 @@ +

Editing Post

+ +<%= render 'form', post: @post %> + +<%= link_to 'Show', @post %> | +<%= link_to 'Back', posts_path %> diff --git a/rails-blog/app/views/posts/index.html.erb b/rails-blog/app/views/posts/index.html.erb new file mode 100644 index 0000000..9b615d3 --- /dev/null +++ b/rails-blog/app/views/posts/index.html.erb @@ -0,0 +1,31 @@ +

<%= notice %>

+ +

Posts

+ + + + + + + + + + + + + <% @posts.each do |post| %> + + + + + + + + + <% end %> + +
TitleBodyUser
<%= post.title %><%= post.body %><%= post.user %><%= link_to 'Show', post %><%= link_to 'Edit', edit_post_path(post) %><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %>
+ +
+ +<%= link_to 'New Post', new_post_path %> diff --git a/rails-blog/app/views/posts/index.json.jbuilder b/rails-blog/app/views/posts/index.json.jbuilder new file mode 100644 index 0000000..d4d0249 --- /dev/null +++ b/rails-blog/app/views/posts/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @posts, partial: 'posts/post', as: :post diff --git a/rails-blog/app/views/posts/new.html.erb b/rails-blog/app/views/posts/new.html.erb new file mode 100644 index 0000000..fb1e2a1 --- /dev/null +++ b/rails-blog/app/views/posts/new.html.erb @@ -0,0 +1,5 @@ +

New Post

+ +<%= render 'form', post: @post %> + +<%= link_to 'Back', posts_path %> diff --git a/rails-blog/app/views/posts/show.html.erb b/rails-blog/app/views/posts/show.html.erb new file mode 100644 index 0000000..456af51 --- /dev/null +++ b/rails-blog/app/views/posts/show.html.erb @@ -0,0 +1,19 @@ +

<%= notice %>

+ +

+ Title: + <%= @post.title %> +

+ +

+ Body: + <%= @post.body %> +

+ +

+ User: + <%= @post.user %> +

+ +<%= link_to 'Edit', edit_post_path(@post) %> | +<%= link_to 'Back', posts_path %> diff --git a/rails-blog/app/views/posts/show.json.jbuilder b/rails-blog/app/views/posts/show.json.jbuilder new file mode 100644 index 0000000..5274482 --- /dev/null +++ b/rails-blog/app/views/posts/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "posts/post", post: @post diff --git a/rails-blog/config/routes.rb b/rails-blog/config/routes.rb index a744ed4..d4884e1 100644 --- a/rails-blog/config/routes.rb +++ b/rails-blog/config/routes.rb @@ -1,4 +1,5 @@ Rails.application.routes.draw do + resources :posts resources :users # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end diff --git a/rails-blog/db/migrate/20170420184355_create_posts.rb b/rails-blog/db/migrate/20170420184355_create_posts.rb new file mode 100644 index 0000000..63abe82 --- /dev/null +++ b/rails-blog/db/migrate/20170420184355_create_posts.rb @@ -0,0 +1,11 @@ +class CreatePosts < ActiveRecord::Migration[5.0] + def change + create_table :posts do |t| + t.text :title + t.text :body + t.references :user, foreign_key: true + + t.timestamps + end + end +end diff --git a/rails-blog/test/controllers/posts_controller_test.rb b/rails-blog/test/controllers/posts_controller_test.rb new file mode 100644 index 0000000..886a56a --- /dev/null +++ b/rails-blog/test/controllers/posts_controller_test.rb @@ -0,0 +1,48 @@ +require 'test_helper' + +class PostsControllerTest < ActionDispatch::IntegrationTest + setup do + @post = posts(:one) + end + + test "should get index" do + get posts_url + assert_response :success + end + + test "should get new" do + get new_post_url + assert_response :success + end + + test "should create post" do + assert_difference('Post.count') do + post posts_url, params: { post: { body: @post.body, title: @post.title, user_id: @post.user_id } } + end + + assert_redirected_to post_url(Post.last) + end + + test "should show post" do + get post_url(@post) + assert_response :success + end + + test "should get edit" do + get edit_post_url(@post) + assert_response :success + end + + test "should update post" do + patch post_url(@post), params: { post: { body: @post.body, title: @post.title, user_id: @post.user_id } } + assert_redirected_to post_url(@post) + end + + test "should destroy post" do + assert_difference('Post.count', -1) do + delete post_url(@post) + end + + assert_redirected_to posts_url + end +end diff --git a/rails-blog/test/fixtures/posts.yml b/rails-blog/test/fixtures/posts.yml new file mode 100644 index 0000000..41c2879 --- /dev/null +++ b/rails-blog/test/fixtures/posts.yml @@ -0,0 +1,11 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + title: MyText + body: MyText + user: one + +two: + title: MyText + body: MyText + user: two diff --git a/rails-blog/test/models/post_test.rb b/rails-blog/test/models/post_test.rb new file mode 100644 index 0000000..6d9d463 --- /dev/null +++ b/rails-blog/test/models/post_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class PostTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end