私は旅程をアップロードし、他のユーザーの旅程を自分のプロフィールに「ダウンロード」できるように、旅程Webアプリケーションを作成しました。どんな理由であれ、私のダウンロードボタンがダウンロードコントローラにルーティングされるのではなく、それは旅程コントローラにルーティングされ、私のアプリケーションを壊す。なぜ私は理解できないようです - あなたが手伝ってくれることを願っています。エラーを引き起こす間違ったアクションへのルートを形成
ここで旅程ショーのページのダウンロードボタンがあります:
旅程/ show.html.erb
<% if logged_in? %>
<% unless current_user.downloaded?(@itinerary) %>
<%= render 'download' %>
<% end %>
<% else %>
<p>
You need to be logged in to download this.
</p>
<% end %>
ダウンロード制御に部分的にレンダリングすべきルート:
の旅程/_download.html.erb
<%= form_for(current_user.downloadeds.build) do |f| %>
<div><%= hidden_field_tag :downloaded_id, @itinerary.id %></div>
<%= f.submit "Download", class: "btn btn-primary" %>
<% end %>
代わりDownloadsController
class DownloadsController < ApplicationController
before_action :logged_in_user
def create
#download id is established in the download form
@itinerary = Itinerary.find(params[:downloaded_id])
current_user.download(@itinerary)
redirect_to @itinerary
end
旅程コントローラにルートを、これが次のエラーを返し:
ActionController error - param is missing or value is empty: itinerary
itineraries_controller.erbを
def create
@itinerary = current_user.itineraries.build(itinerary_params)
#@user = User.find(params[:id])
if @itinerary.save
# render the page with the users itineraries
flash[:success] = "Your itinerary has been added!"
redirect_to request.referrer || current_user
else
#show the add itinerary page
flash[:error] = @itinerary.errors.full_messages
render 'new'
end
end
設定/ルート:form_for
で
# You can have the root of your site routed with "root"
root 'static_pages#home'
get 'signup' => 'users#new'
get 'help' => 'static_pages#help'
get 'about' => 'static_pages#about'
get 'login' => 'sessions#new'
post 'login' => 'sessions#create'
delete 'logout' => 'sessions#destroy'
resources :users
resources :itineraries do
resources :reviews
end
resources :downloads, only: [:create, :show]
mount PdfjsViewer::Rails::Engine => "/pdfjs", as: 'pdfjs'
@ morales257これがあなたの質問に答えた場合は、答えの隣のチェックマークをクリックしてそれを受け入れてください。チェックマークが緑色に変わります。アップホーテも常に高く評価されています。 :D –