无法找到带有'id'=的对象

时间:2018-01-31 00:47:50

标签: ruby-on-rails

难倒在这里,可能是因为我的铁路noobness。

我正在建立一个有投标的双边市场。使用设计为这里相关的2个用户类型,客户和指南。客户建立旅行,导游可以查看旅行,然后出价。我已经为导航(家庭)创建了一个自定义登录页面,一旦他们登录列出了客户端旅行,我在导向控制器中使用自定义视图和方法来执行此操作,没问题。

然而,当我从该页面尝试进入指南的下一个自定义页面以查看旅行的详细信息(然后提交出价)时,我突然发现“无法找到带有'id'的旅行=“与Trip.find相关的错误(params [:id])(如果我硬编码Trip.find(1)它的工作原理)。

指导控制器

class GuidesController < ApplicationController
  def home
    @trips = Trip.all
    @guide = current_guide
  end

  def view_trip
    @trip = Trip.find(params[:id])
    @guide = current_guide
  end
end

指南的主页(指南点击查看行程的地方)

<p>Guides's Email: <%= @guide.email %></p>
<% @trips.each do |trip| %>
  <li>Location: <%= trip.location.description %></li>
  <li>Details <%= trip.details %></li> 
  <p><%= link_to "View Details and Bid", guides_view_trip_path(trip) %></p>
<% end %>

然后当我尝试访问它/点击链接时页面上的错误输出:amazonaws.com/guides/view_trip.1

Couldn't find Trip with 'id'=
Extracted source (around line #21):

19  def view_trip
20
21      @trip = Trip.find(params[:id])
22      #@trip = Trip.find(1)
23      @guide = current_guide
24  end

Request
Parameters:
{"format"=>"1"}

3 个答案:

答案 0 :(得分:0)

更改此行:

<p><%= link_to "View Details and Bid", guides_view_trip_path(trip) %></p>

通过

<p><%= link_to "View Details and Bid", guides_view_trip_path(id: trip.id) %></p>

答案 1 :(得分:0)

我不知道您的routes.rb设计是什么,如果您需要使用带有rails默认RESTful网址的此网址,那么您的routes.rb就像这样

get 'guides/view_trip/:id(.:format)', to: "guides#view_trip", as: :guides_view_trip

#=>  guides_view_trip GET  /guides/view_trip/:id(.:format) guides#view_trip

现在您可以使用下面的视图

<%= link_to "View Details and Bid", guides_view_trip_path(trip) %>
#=> /guides/view_trip/1

如果您使用guides_view_trip_path(id: trip.id),那么网址就像amazonaws.com/guides/view_trip?id=1一样,如果您使用我所描述的RESTful,那么就会显示amazonaws.com/guides/view_trip/1

或者您可以Trip.find(params[:id])使用Trip.find(params[:format])

希望有所帮助

答案 2 :(得分:0)

您的代码应该是那样的

class GuidesController < ApplicationController
  def home
    @trips = Trip.all
    @guide = current_guide
  end

  def view_trip
    @trip = Trip.find(params[:format])
    @guide = current_guide
  end
end