Ruby on Railsでnewから取得してアクションを作成して表示ページにデータを表示するにはどうすればよいですか?
概要
こんにちは、Rails を使用しており、送信ボタンをクリックした後にデータを取得しようとしていますが、送信ボタンを押してもデータが保存されません。保存後に show.html.erb にデータを表示する方法を教えてください。コードは次のとおりです。の:
Articles_controller.erb:
class ArticlesController < ApplicationController
def show
@article = Article.find(params[:id])
end
def index
@articles = Article.all
end
def new
@article=Article.new
end
def create
@article = Article.new(article_params)
@article.save
redirect_to @article
end
private
def article_params
params.require(:article).permit(:title, :description)
end
end
新しい.html.erb:
<h1>Create new File</h1>
<%= form_with scope: :article, url: articles_path , local: true do |f| %>
<p>
<%= f.label :title, "Title" %><br/>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :description, "Description" %><br/>
<%= f.text_area :description %>
</p>
<p><%= f.submit %> </p>
<% end %>
ルート.rb:
Rails.application.routes.draw は実行します
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
# Defines the root path route ("/")
root "articles#index"
resources :articles, only: [:edit, :update, :show, :destroy, :index, :new]
end
show.html.erb:
<h1>show</h1>
<h3><strong>Title: </strong><%= @article.title %></h3>
<h3><strong>Description: </strong><%= @article.description %></h3>
解決策
あなたが従うチュートリアルが何であれ、それはあまり良いものではないと思います。
レコードの作成または更新が成功すると単純に仮定しないでください (仮定すると、… が作成されます)。ユーザーが無効な入力を行う場合は、それに対処する必要があります。
class ArticlesController < ApplicationController
# ...
# POST /articles
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render :new # render the form again but with error messages
end
end
private
def article_params
params.require(:article).permit(:title, :description)
end
end
また、リソースに作成アクションの POST /articles ルートを生成させる必要もあります。
# there is no point in using "only" when you're generating everything
resources :articles
また、リソース指向スタイルでフォーム ヘルパーを使用することもできます。
<%= form_with model: @article do |f| %>
<% if @article.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@article.errors.count, "error") %> prohibited this article from being saved:</h2>
<ul>
<% @article.errors.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :title, "Title" %><br/>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :description, "Description" %><br/>
<%= f.text_area :description %>
</p>
<p><%= f.submit %></p>
<% end %>
これにより、入力がモデルにバインドされるため、検証が失敗した場合でもフォームが空白にならず、ユーザーが非常に不満を抱くことになります。検証が失敗した場合には、フォームにエラー メッセージも表示されます。
Rails は構成よりも慣習主導です。特別な理由がない限り、URI、スコープなどを構成する必要はありません。また、構成する必要もありません。
Rails は、モデルを参照して、フォームアクションにどのパス (/articles または /articles/:id) を使用するか、および正しい HTTP メソッドを判断します。
Rails での基本的な CRUD 操作は、公式ガイドで十分にカバーされています。