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? %> +
<%= notice %>
+ +Title | +Body | +User | ++ | ||
---|---|---|---|---|---|
<%= 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?' } %> | +
<%= 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