首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby \x\x路由错误

Ruby \x\x路由错误
EN

Stack Overflow用户
提问于 2017-05-07 17:08:53
回答 1查看 23关注 0票数 0

我的应用程序有路由问题。

甚至当我试图查看页面时,我会得到以下错误

代码语言:javascript
复制
ActionController::UrlGenerationError in Conferences#index
No route matches {:action=>"create", :conference_id=>nil, :controller=>"subscriptions", :format=>nil} missing required keys: [:conference_id]

造成问题的原因是缺少所需的密钥。我不知道丢失的钥匙是什么,也不知道怎么找到它。

我相信表单的设置方式有问题,但我不知道是什么。

有人能告诉我,路由问题的原因是什么吗?甚至告诉我怎么解决这个问题?

Routes.rb

代码语言:javascript
复制
  resources :conferences, shallow: true do
    resources :subscriptions, only: [:create, :destroy]
  end

Index.html.erb

代码语言:javascript
复制
  <% @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

代码语言:javascript
复制
   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
    end

SubscriptionController

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-07 17:15:42

您可以像这样迭代@conferences

代码语言:javascript
复制
<% @conferences.each do |conference| %>

因此,在每次迭代中都有一个局部变量conference,但没有实例变量@conference。只需将按钮部分更改为:

代码语言:javascript
复制
<% 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 %>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43834326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档