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
|
||||
|
||||
%h1 Listing members
|
||||
= paginate @members
|
||||
|
||||
.grid.grid-cols-4
|
||||
- @members.each do |member|
|
||||
.fex.flex-col.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm.m-10
|
||||
= image_for( member , class: "h-60 w-full object-cover")
|
||||
%h3.p-5.text-2xl.bg-gray-100.text-black.font-bold.text-center= member.name
|
||||
%div.h-full
|
||||
.p-5.text-center
|
||||
.m-2.text-sm.leading-relaxed.line-clamp-3{ prose_classes }
|
||||
= markdown(member.bio)
|
||||
.grid.grid-cols-4
|
||||
- @members.each do |member|
|
||||
.fex.flex-col.overflow-hidden.rounded-lg.border.border-gray-100.shadow-sm.m-10
|
||||
= image_for( member , class: "h-60 w-full object-cover")
|
||||
%h3.p-5.text-2xl.bg-gray-100.text-black.font-bold.text-center= member.name
|
||||
%div.h-full
|
||||
.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
|
||||
resources :stories
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
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
|
||||
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|
|
||||
t.bigint "messageboard_id", 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