【问题标题】:Not hitting controller method using nested resources不使用嵌套资源访问控制器方法
【发布时间】:2016-06-29 16:51:51
【问题描述】:

我为特定列表创建了一个开放日。我现在正在尝试添加一个 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]

【问题讨论】:

  • 您能发布您遇到的错误吗?
  • 看起来您没有将 id 或对象作为参数传递给路径帮助程序,因此它不知道该路由使用哪个 :id
  • 发布了错误。对此感到抱歉。

标签: ruby-on-rails model-view-controller routing erb


【解决方案1】:

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

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

希望这会有所帮助!

【讨论】:

  • 根需要两个对象,listinghouse
  • 当我添加@open_house 时,我收到一个新错误。没有路由匹配 {:action=>"rsvp", :controller=>"open_houses", :id=>nil, :listing_id=>nil} 缺少必需的键:[:id, :listing_id]
  • @NicNilov 根据提供的异常,在这种特殊情况下,listing_id 是从呈现链接的页面推断出来的。
【解决方案2】:

我没有足够的声誉来发表评论,所以只总结上面 Zoran 和 Nic 的 cmets:

  • 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=&gt;"rsvp", :controller=&gt;"open_houses", :id=&gt;nil, :listing_id=&gt;nil} missing required keys: [:id, :listing_id]

【讨论】:

  • 所以我有一个应该填充 RSVP 的 open_house_rsvps 表​​。在该表中有 open_house_id 和 agent_id。为什么我需要传入listing id?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2016-09-20
相关资源
最近更新 更多