【发布时间】:2018-11-01 06:27:27
【问题描述】:
我希望能够直接从列表显示页面创建订单,而不必被定向到新的订单页面。
我有一个列表(listingcontroller show 方法),可以通过单击按钮转到订单页面(orderscontroller 创建方法)来购买。
我可以通过什么方式直接在列表显示页面上获得订单?
我尝试添加表单,但出现错误:
First argument in form cannot contain nil or be empty
<%= form_for([@listing, @order]) do |form| %>
当我使用 Orders 控制器的 create 方法并将其放入 Listings Controller Show 方法中时,我得到了这个错误:
Couldn't find Listing without an ID
这是我想要的列表显示页面中的 form_for:
<%= form_for([@listing, @order]) do |form| %>
....
订单控制器创建:
@order = Order.new(order_params)
@listing = Listing.find(params[:listing_id])
@seller = @listing.user
@order.listing_id = @listing.id
@order.buyer_id = current_user.id
@order.seller_id = @seller.id
...
路线:
resources :listings do
resources :orders
end
上市模式:
has_many :orders
类别型号:
has_and_belongs_to_many :listings
我尝试使用“def create”和不使用“def create”将订单创建方法注入到 Listings show 方法中。我把“@listing = Listing.find(params[:listing_id])”放在create方法之前(当使用“def create”时,我仍然会得到它需要一个id的错误。即使我得到那个错误,在网页底部的请求显示列表 ID 在那里。
我尝试在表单中使用隐藏字段,但对我不起作用。
我是否需要对控制器做点什么,或者有没有办法以某种方式将 :listing_id 加载到表单中。这对你们中的一些人来说可能是非常快速和简单的事情,但为什么它不会在列表显示页面上加载,但在订单创建页面中加载正常?
【问题讨论】:
标签: ruby-on-rails ruby