c. CodeAcademy の例と同様に、画像を外部サービスに保存し、その画像への URL 参照を保存します。 AWS S3 など、そのために特別に設計されたサービスがいくつかあります。これらは一般に画像とファイルを提供するために高度に最適化されているため、画像をすべて単独で提供するよりも優れています。ただし、StackOverflow などの規模が大きい場合は、外部サービスを使用するよりも集中的に使用した方が良い/安価になる可能性があるため、独自のストレージ サービスを持ちたい場合があります。では、これらの外部サービスはどのようにしてそれを行うのでしょうか?はそれをディスクに直接保存する場合があります。次に、その URL にアクセスすると、プログラムは別のファイルと同じようにそのコンテンツを提供しますが、ブラウザーがそのコンテンツを解釈できるように必要なヘッダーを追加します (上記の概念 1. を参照)。編集: StackOverflow は外部サービスを使用します: imgur.com/gravatar.com、ブラウザの「要素の検査」ツールを使用して、自分の目で確認してください:)
概要
これは Articles という名前のコントローラーです
def new
@article =Article.new
end
def show
@article=Article.find(params[:id])
end
def create
@article=Article.new(article_params)
if @article.save
redirect_to @article
else
render :new, status: :unprocessable_entity
end
end
これが景色です
<h1>New Article</h1>
<%form_for(@article) do |form|%>
<div>
<%=form.label :title%><br>
<%=form.text_field :title%>
</div>
<div>
<%=form.label :body%><br>
<%=form.text_field :body%>
</div>
<div>
<%=form.submit%>
</div>
<%end%>
これがルートです
get 'articles/new', to: 'articles#new'
post 'articles/create', to: 'articles#create'
これがルートです
解決策
エラーは form_for 内で発生します。新しい記事オブジェクトが与えられると、フォームが送信されるパスを推測する必要があります。規則に従い、「#{object.model_name.plural}_path」を実行しようとします。
ルートには名前がなく、ヘルパーは生成されません。次のようにして、明示的に名前を付けることができます。
get 'articles/new', to: 'articles#new', as: :new_article
post 'articles/create', to: 'articles#create', as: :articles
または、代わりにリソースのショートカットを使用します。
resources :articles, only: %i[new create]