不使用嵌套资源命中控制器方法

Not hitting controller method using nested resources

我为特定房源创建了开放日。我现在正在尝试添加 RSVP 功能。我不断收到错误,我无法弄清楚。我敢肯定这是愚蠢的事情,但我只是没有看到它。

佣金路线:

rsvp_listing_open_house GET  /listings/:listing_id/open_houses/:id/rsvp(.:format)  open_houses#rsvp                   

我的路线:

resources :listings do
  member do
    get 'like'
    get 'unlike'
    get 'duplicate'
    get 'gallery'
    delete 'gallery' => 'listings#clear_gallery'
    get 'manage_photos'
    get 'craigslist'
    get "add_to_collection"
    get 'request_photos'
  end
  resources :open_houses do
    member do
      get 'rsvp'
    end
  end
  resources :listing_feedbacks do
    member do
      get 'archive_feedback'
    end
  end
end

我的控制器:

def rsvp
  @open_house_rsvp = params[:open_house_rsvp]
  agent_id = params[:agent_id]
  open_house_id = params[:open_house_id]
  OpenHouseRsvp.create(:agent_id => agent_id, :open_house_id => open_house_id )
  flash[:notice] = "Your RSVP has been submitted!"
  redirect_to listing_open_houses_path
end

查看:

<%= link_to "RSVP", rsvp_listing_open_house_path %>

错误:

ActionController::UrlGenerationError in OpenHouses#index

No route matches {:action=>"rsvp", :controller=>"open_houses", :listing_id=>"5341"} missing required keys: [:id]

根据提供的错误,路径助手已经收到 :listing_id,并期待来自开放日对象的 :id,以便它可以正确构建路径。假设您在控制器中定义了一个 @open_house 对象,您的路径助手应该如下所示:

<%= link_to "RSVP", rsvp_listing_open_house_path @open_house %>

希望对您有所帮助!

我没有足够的声望 post 评论所以只总结上面 Zoran 和 Nic 的评论:

  • rsvp_listing_open_house_path 需要 2 个参数:listing_idopen_house_id,您可以使用 rsvp_listing_open_house_path(@listing, @open_house)rsvp_listing_open_house_path(@listing.id, @open_house.id)
  • 确保您的控制器操作中有 @listing@open_house 可用(您可以将它们命名为不同的名称) .否则,您将收到评论中提到的错误:No route matches {:action=>"rsvp", :controller=>"open_houses", :id=>nil, :listing_id=>nil} missing required keys: [:id, :listing_id]