adding stories, scaffold
This commit is contained in:
parent
10686d1f5e
commit
23a2254d2e
58
app/controllers/stories_controller.rb
Normal file
58
app/controllers/stories_controller.rb
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
class StoriesController < ApplicationController
|
||||||
|
before_action :set_story, only: %i[ show edit update destroy ]
|
||||||
|
|
||||||
|
# GET /stories
|
||||||
|
def index
|
||||||
|
@stories = Story.all
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /stories/1
|
||||||
|
def show
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /stories/new
|
||||||
|
def new
|
||||||
|
@story = Story.new
|
||||||
|
end
|
||||||
|
|
||||||
|
# GET /stories/1/edit
|
||||||
|
def edit
|
||||||
|
end
|
||||||
|
|
||||||
|
# POST /stories
|
||||||
|
def create
|
||||||
|
@story = Story.new(story_params)
|
||||||
|
|
||||||
|
if @story.save
|
||||||
|
redirect_to @story, notice: "Story was successfully created."
|
||||||
|
else
|
||||||
|
render :new, status: :unprocessable_entity
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# PATCH/PUT /stories/1
|
||||||
|
def update
|
||||||
|
if @story.update(story_params)
|
||||||
|
redirect_to @story, notice: "Story was successfully updated."
|
||||||
|
else
|
||||||
|
render :edit, status: :unprocessable_entity
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# DELETE /stories/1
|
||||||
|
def destroy
|
||||||
|
@story.destroy
|
||||||
|
redirect_to stories_url, notice: "Story was successfully destroyed."
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
# Use callbacks to share common setup or constraints between actions.
|
||||||
|
def set_story
|
||||||
|
@story = Story.find(params[:id])
|
||||||
|
end
|
||||||
|
|
||||||
|
# Only allow a list of trusted parameters through.
|
||||||
|
def story_params
|
||||||
|
params.require(:story).permit(:picture, :header, :text, :happened)
|
||||||
|
end
|
||||||
|
end
|
2
app/helpers/stories_helper.rb
Normal file
2
app/helpers/stories_helper.rb
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
module StoriesHelper
|
||||||
|
end
|
2
app/models/story.rb
Normal file
2
app/models/story.rb
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
class Story < ApplicationRecord
|
||||||
|
end
|
@ -1,14 +0,0 @@
|
|||||||
<figure class="attachment attachment--<%= blob.representable? ? "preview" : "file" %> attachment--<%= blob.filename.extension %>">
|
|
||||||
<% if blob.representable? %>
|
|
||||||
<%= image_tag blob.representation(resize_to_limit: local_assigns[:in_gallery] ? [ 800, 600 ] : [ 1024, 768 ]) %>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<figcaption class="attachment__caption">
|
|
||||||
<% if caption = blob.try(:caption) %>
|
|
||||||
<%= caption %>
|
|
||||||
<% else %>
|
|
||||||
<span class="attachment__name"><%= blob.filename %></span>
|
|
||||||
<span class="attachment__size"><%= number_to_human_size blob.byte_size %></span>
|
|
||||||
<% end %>
|
|
||||||
</figcaption>
|
|
||||||
</figure>
|
|
@ -1,14 +1,12 @@
|
|||||||
|
= paginate @members
|
||||||
.flex.justify-center
|
.flex.justify-center
|
||||||
|
|
||||||
%h1 Listing members
|
.grid.grid-cols-4
|
||||||
= paginate @members
|
- @members.each do |member|
|
||||||
|
.fex.flex-col.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm.m-10
|
||||||
.grid.grid-cols-4
|
= image_for( member , class: "h-60 w-full object-cover")
|
||||||
- @members.each do |member|
|
%h3.p-5.text-2xl.bg-gray-100.text-black.font-bold.text-center= member.name
|
||||||
.fex.flex-col.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm.m-10
|
%div.h-full
|
||||||
= image_for( member , class: "h-60 w-full object-cover")
|
.p-5.text-center
|
||||||
%h3.p-5.text-2xl.bg-gray-100.text-black.font-bold.text-center= member.name
|
.m-2.text-sm.leading-relaxed.line-clamp-3{ prose_classes }
|
||||||
%div.h-full
|
= markdown(member.bio)
|
||||||
.p-5.text-center
|
|
||||||
.m-2.text-sm.leading-relaxed.line-clamp-3{ prose_classes }
|
|
||||||
= markdown(member.bio)
|
|
||||||
|
22
app/views/stories/_form.html.haml
Normal file
22
app/views/stories/_form.html.haml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
= form_for @story do |f|
|
||||||
|
- if @story.errors.any?
|
||||||
|
#error_explanation
|
||||||
|
%h2= "#{pluralize(@story.errors.count, "error")} prohibited this story from being saved:"
|
||||||
|
%ul
|
||||||
|
- @story.errors.full_messages.each do |message|
|
||||||
|
%li= message
|
||||||
|
|
||||||
|
.field
|
||||||
|
= f.label :picture
|
||||||
|
= f.text_field :picture
|
||||||
|
.field
|
||||||
|
= f.label :header
|
||||||
|
= f.text_field :header
|
||||||
|
.field
|
||||||
|
= f.label :text
|
||||||
|
= f.text_area :text
|
||||||
|
.field
|
||||||
|
= f.label :happened
|
||||||
|
= f.date_field :happened
|
||||||
|
.actions
|
||||||
|
= f.submit 'Save'
|
7
app/views/stories/edit.html.haml
Normal file
7
app/views/stories/edit.html.haml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
%h1 Editing story
|
||||||
|
|
||||||
|
= render 'form'
|
||||||
|
|
||||||
|
= link_to 'Show', @story
|
||||||
|
\|
|
||||||
|
= link_to 'Back', stories_path
|
27
app/views/stories/index.html.haml
Normal file
27
app/views/stories/index.html.haml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
%h1 Listing stories
|
||||||
|
|
||||||
|
%table
|
||||||
|
%thead
|
||||||
|
%tr
|
||||||
|
%th Picture
|
||||||
|
%th Header
|
||||||
|
%th Text
|
||||||
|
%th Happened
|
||||||
|
%th
|
||||||
|
%th
|
||||||
|
%th
|
||||||
|
|
||||||
|
%tbody
|
||||||
|
- @stories.each do |story|
|
||||||
|
%tr
|
||||||
|
%td= story.picture
|
||||||
|
%td= story.header
|
||||||
|
%td= story.text
|
||||||
|
%td= story.happened
|
||||||
|
%td= link_to 'Show', story
|
||||||
|
%td= link_to 'Edit', edit_story_path(story)
|
||||||
|
%td= link_to 'Destroy', story, method: :delete, data: { confirm: 'Are you sure?' }
|
||||||
|
|
||||||
|
%br
|
||||||
|
|
||||||
|
= link_to 'New Story', new_story_path
|
5
app/views/stories/new.html.haml
Normal file
5
app/views/stories/new.html.haml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
%h1 New story
|
||||||
|
|
||||||
|
= render 'form'
|
||||||
|
|
||||||
|
= link_to 'Back', stories_path
|
18
app/views/stories/show.html.haml
Normal file
18
app/views/stories/show.html.haml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
%p#notice= notice
|
||||||
|
|
||||||
|
%p
|
||||||
|
%b Picture:
|
||||||
|
= @story.picture
|
||||||
|
%p
|
||||||
|
%b Header:
|
||||||
|
= @story.header
|
||||||
|
%p
|
||||||
|
%b Text:
|
||||||
|
= @story.text
|
||||||
|
%p
|
||||||
|
%b Happened:
|
||||||
|
= @story.happened
|
||||||
|
|
||||||
|
= link_to 'Edit', edit_story_path(@story)
|
||||||
|
\|
|
||||||
|
= link_to 'Back', stories_path
|
@ -1,4 +1,5 @@
|
|||||||
Rails.application.routes.draw do
|
Rails.application.routes.draw do
|
||||||
|
resources :stories
|
||||||
|
|
||||||
devise_for :members
|
devise_for :members
|
||||||
|
|
||||||
|
12
db/migrate/20230111164425_create_stories.rb
Normal file
12
db/migrate/20230111164425_create_stories.rb
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
class CreateStories < ActiveRecord::Migration[7.0]
|
||||||
|
def change
|
||||||
|
create_table :stories do |t|
|
||||||
|
t.string :picture
|
||||||
|
t.string :header
|
||||||
|
t.text :text
|
||||||
|
t.date :happened
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
11
db/schema.rb
generated
11
db/schema.rb
generated
@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema[7.0].define(version: 2022_12_31_154221) do
|
ActiveRecord::Schema[7.0].define(version: 2023_01_11_164425) do
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
|
||||||
@ -46,6 +46,15 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_31_154221) do
|
|||||||
t.index ["reset_password_token"], name: "index_members_on_reset_password_token", unique: true
|
t.index ["reset_password_token"], name: "index_members_on_reset_password_token", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "stories", force: :cascade do |t|
|
||||||
|
t.string "picture"
|
||||||
|
t.string "header"
|
||||||
|
t.text "text"
|
||||||
|
t.date "happened"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
end
|
||||||
|
|
||||||
create_table "thredded_categories", force: :cascade do |t|
|
create_table "thredded_categories", force: :cascade do |t|
|
||||||
t.bigint "messageboard_id", null: false
|
t.bigint "messageboard_id", null: false
|
||||||
t.text "name", null: false
|
t.text "name", null: false
|
||||||
|
48
test/controllers/stories_controller_test.rb
Normal file
48
test/controllers/stories_controller_test.rb
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
require "test_helper"
|
||||||
|
|
||||||
|
class StoriesControllerTest < ActionDispatch::IntegrationTest
|
||||||
|
setup do
|
||||||
|
@story = stories(:one)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should get index" do
|
||||||
|
get stories_url
|
||||||
|
assert_response :success
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should get new" do
|
||||||
|
get new_story_url
|
||||||
|
assert_response :success
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should create story" do
|
||||||
|
assert_difference("Story.count") do
|
||||||
|
post stories_url, params: { story: { happened: @story.happened, header: @story.header, picture: @story.picture, text: @story.text } }
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_redirected_to story_url(Story.last)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should show story" do
|
||||||
|
get story_url(@story)
|
||||||
|
assert_response :success
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should get edit" do
|
||||||
|
get edit_story_url(@story)
|
||||||
|
assert_response :success
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should update story" do
|
||||||
|
patch story_url(@story), params: { story: { happened: @story.happened, header: @story.header, picture: @story.picture, text: @story.text } }
|
||||||
|
assert_redirected_to story_url(@story)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should destroy story" do
|
||||||
|
assert_difference("Story.count", -1) do
|
||||||
|
delete story_url(@story)
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_redirected_to stories_url
|
||||||
|
end
|
||||||
|
end
|
13
test/fixtures/stories.yml
vendored
Normal file
13
test/fixtures/stories.yml
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
||||||
|
|
||||||
|
one:
|
||||||
|
picture: MyString
|
||||||
|
header: MyString
|
||||||
|
text: MyText
|
||||||
|
happened: 2023-01-11
|
||||||
|
|
||||||
|
two:
|
||||||
|
picture: MyString
|
||||||
|
header: MyString
|
||||||
|
text: MyText
|
||||||
|
happened: 2023-01-11
|
7
test/models/story_test.rb
Normal file
7
test/models/story_test.rb
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
require "test_helper"
|
||||||
|
|
||||||
|
class StoryTest < ActiveSupport::TestCase
|
||||||
|
# test "the truth" do
|
||||||
|
# assert true
|
||||||
|
# end
|
||||||
|
end
|
47
test/system/stories_test.rb
Normal file
47
test/system/stories_test.rb
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
require "application_system_test_case"
|
||||||
|
|
||||||
|
class StoriesTest < ApplicationSystemTestCase
|
||||||
|
setup do
|
||||||
|
@story = stories(:one)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "visiting the index" do
|
||||||
|
visit stories_url
|
||||||
|
assert_selector "h1", text: "Stories"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should create story" do
|
||||||
|
visit stories_url
|
||||||
|
click_on "New story"
|
||||||
|
|
||||||
|
fill_in "Happened", with: @story.happened
|
||||||
|
fill_in "Header", with: @story.header
|
||||||
|
fill_in "Picture", with: @story.picture
|
||||||
|
fill_in "Text", with: @story.text
|
||||||
|
click_on "Create Story"
|
||||||
|
|
||||||
|
assert_text "Story was successfully created"
|
||||||
|
click_on "Back"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should update Story" do
|
||||||
|
visit story_url(@story)
|
||||||
|
click_on "Edit this story", match: :first
|
||||||
|
|
||||||
|
fill_in "Happened", with: @story.happened
|
||||||
|
fill_in "Header", with: @story.header
|
||||||
|
fill_in "Picture", with: @story.picture
|
||||||
|
fill_in "Text", with: @story.text
|
||||||
|
click_on "Update Story"
|
||||||
|
|
||||||
|
assert_text "Story was successfully updated"
|
||||||
|
click_on "Back"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "should destroy Story" do
|
||||||
|
visit story_url(@story)
|
||||||
|
click_on "Destroy this story", match: :first
|
||||||
|
|
||||||
|
assert_text "Story was successfully destroyed"
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user