我的应用程序有路由问题。
甚至当我试图查看页面时,我会得到以下错误
ActionController::UrlGenerationError in Conferences#index
No route matches {:action=>"create", :conference_id=>nil, :controller=>"subscriptions", :format=>nil} missing required keys: [:conference_id]造成问题的原因是缺少所需的密钥。我不知道丢失的钥匙是什么,也不知道怎么找到它。
我相信表单的设置方式有问题,但我不知道是什么。
有人能告诉我,路由问题的原因是什么吗?甚至告诉我怎么解决这个问题?
Routes.rb
resources :conferences, shallow: true do
resources :subscriptions, only: [:create, :destroy]
endIndex.html.erb
<% @conferences.each do |conference| %>
<div class="box">
<%= image_tag conference.picture.url, :class => "background" if conference.picture?%>
<div class="text-box">
<p>CONFERENCE:<%= conference.conference %>
</p>
<p>COUNTRY:<%= conference.country %>
</p>
<p>MONTH:<%= conference.month %>
</p>
<p>PRESENCE:<%= conference.presence %>
</p>
<p>AUDIENCE:<%= conference.audience %>
</p>
<p>COST:<%= conference.cost %>
</p>
<p>Attending:
</p>
</div>
</div>
<% if current_user.subscribed_to?(@conference) %>
<%= button_to "Unsubscribe", subscription_path(current_user.find_subscription(@conference)), method: :delete %>
<% else %>
<%= button_to "Subscribe", conference_subscriptions_path(@conference, @subscription), method: :post %>
<% end %>
<% end %>ConferenceController
def index
@conferences = Conference.paginate(page: params[:page])
if params[:search]
@conferences = Conference.search(params[:search]).order("created_at DESC").paginate(page: params[:page])
else
@conferences = Conference.all.order('created_at DESC').paginate(page: params[:page])
end
endSubscriptionController
class SubscriptionsController < ApplicationController
before_action :set_conference, only: :create
def create
if current_user.subsciptions.create(conference: @conference)
flash[:success] = "You are now subscribed to { @conference.name }"
else
flash[:error] = "Could not create subscription."
end
redirect_to @conference
end
def destroy
@subscription = current_user.subsciptions.find(params[:id])
if @subscription.destroy
flash[:success] = "You are no longer subscribed to { @conference.name }"
else
flash[:error] = "Oh noes"
end
redirect_to @subscription.conference
end
def set_conference
@conference = Conference.find(:params[conference_id])
end
end发布于 2017-05-07 17:15:42
您可以像这样迭代@conferences
<% @conferences.each do |conference| %>因此,在每次迭代中都有一个局部变量conference,但没有实例变量@conference。只需将按钮部分更改为:
<% if current_user.subscribed_to?(conference) %>
<%= button_to "Unsubscribe",
subscription_path(current_user.find_subscription(conference)),
method: :delete %>
<% else %>
<%= button_to "Subscribe",
conference_subscriptions_path(conference),
method: :post %>
<% end %>https://stackoverflow.com/questions/43834326
复制相似问题