adding stories, scaffold

This commit is contained in:
Torsten 2023-01-11 18:48:06 +02:00
parent 10686d1f5e
commit 23a2254d2e
18 changed files with 289 additions and 27 deletions

View 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

View File

@ -0,0 +1,2 @@
module StoriesHelper
end

2
app/models/story.rb Normal file
View File

@ -0,0 +1,2 @@
class Story < ApplicationRecord
end

View File

@ -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>

View File

@ -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)

View 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'

View File

@ -0,0 +1,7 @@
%h1 Editing story
= render 'form'
= link_to 'Show', @story
\|
= link_to 'Back', stories_path

View 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

View File

@ -0,0 +1,5 @@
%h1 New story
= render 'form'
= link_to 'Back', stories_path

View 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

View File

@ -1,4 +1,5 @@
Rails.application.routes.draw do Rails.application.routes.draw do
resources :stories
devise_for :members devise_for :members

View 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
View File

@ -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

View 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
View 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

View File

@ -0,0 +1,7 @@
require "test_helper"
class StoryTest < ActiveSupport::TestCase
# test "the truth" do
# assert true
# end
end

View 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