不使用嵌套资源命中控制器方法
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_id、open_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]
我为特定房源创建了开放日。我现在正在尝试添加 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_id、open_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]