我有一个名为Listings的资源和一个名为email
的资源列出has_many:电子邮件 电子邮件belongs_to:listing
我正在尝试将列表ID传递给email.listing_id,但我一直收到此错误:
Couldn't find Listing without an ID ActiveRecord::RecordNotFound in EmailsController#create
这是我的代码:
class EmailsController < InheritedResources::Base
def new
@listing = Listing.find(params[:listing_id])
@email = Email.new
end
def create
@listing = Listing.find(params[:listing_id])
@email = Email.new(params[:email])
end
从我的商品详情页面中我传递了listing.id
<%=link_to "Email Listing", new_email_path(:listing_id => @listing.id)
电子邮件_form
<%= f.input :email %>
<%= f.input :message %>
<%= f.hidden_field :listing_id, :value => @listing.id %>
%= f.button :submit, :value=> "Send Email" %>
答案 0 :(得分:0)
我不明白你的@listing = Listing.find(params[@email.listing_id])
,因为你已经在@email
变量上拥有了你想要的ID,你可以避免再次使用params,尝试类似:
@listing = Listing.find(@email.listing_id)
答案 1 :(得分:0)
请查看此帖子以获得答案:
Couldn't find Listing without an ID
问题是我的参数是这样的:
"email"=>{"email"=>"xyz@z.com",
"message"=>"hello",
"listing_id"=>"3"},
"commit"=>"Send Email"}
只需更改
@listing = Listing.find(params[:listing_id])
到
@listing = Listing.find(params[:email][:listing_id])
答案 2 :(得分:-1)
我很确定这是因为您为“新”操作创建了视图,并且在尝试进入页面时您没有任何参数,所以基本上您执行'Listing.find(nil) “的。
如果没有,请尝试打印params的值,并检查listing_id丢失的位置。